2011-06-09 68 views
0

Possible Duplicate:
C++ multi dimensional arrayC++:字符串

我试图创建一个用于创建基于的对象构造函数的参数字符串一个一个任意大小的数组的一类新的多维数组。

这里,对象的构造我想到目前为止代码:

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::string * commands = new std::string[3][numberOfCommands]; 
} 

我得到一个错误:“numberOfCommands不能出现在常量表达式”,可能有人告诉我正确的方式来指定一个对象中的数组,我不知道直到执行的大小。

感谢,J

+0

上帝(或者是它斯特劳斯?)创建的'VECTOR'。 – 2011-06-09 12:20:58

+0

所以是不好的形式对这样的堆添加的阵列(如果我修复语法)?我认为,作为后的尺寸变化不会创建它我wouldnt需要一个载体会给我featres,我只需要一个简单的数组,多数民众赞成规模将在运行时被定义,但它在定义时将仍然是固定的。 – 2011-06-09 12:33:07

回答

2

这或许应该被实现为一个结构,一个载体,就像这样:

struct command { 
    std::string first; 
    std::string second; 
    std::string third; 
}; 

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::vector<command> commands(numberOfCommands); 
} 

当然,你应该选择适当的名称为command成员。

0

反转维度的顺序...

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::string (*commands)[3] = new std::string[numberOfCommands][3]; 
} 

不过,我强烈建议你考虑使用向量代替。

+0

这不起作用。这不仅仅是C++如何处理数组。 – Beta 2011-06-09 12:23:32

+0

@Beta:抱歉,忘了LHS阵列部分;这应该现在工作。 – 2011-06-09 13:01:40

0

我会用一个std ::矢量代替,使生活更容易:在堆中分配时

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::vector<std::vector<std::string>> mystrings(numberOfCommands); 
} 
+0

我认为你在错误的顺序维度。它应该是3,然后是numberOfCommands。 – Beta 2011-06-09 12:25:11

1

可变长度数组只允许。

您需要分两步分配数组 - 首先分配长度为3(来自指针)的数组,然后遍历3个元素并为每个元素分配新的字符串。

我建议你使用std::vector代替。