1

我想这样做:

Class Obj{
private:
int a;
int b[a][3];

public:
Obj(int a);
}

这样我就可以在创建对象时指定数组的大小。但是我得到这个编译错误: 错误:数组绑定不是整数常量

我不想使用向量,有人知道我该怎么做吗?谢谢。

4

3 回答 3

1

数组大小应该是constant. 只有一种方法,没有动态分配 - 为此类的所有数组使用预定义的常量。

class Obj{
private:
static constexr int a = 5;
int b[a][3];

public:
Obj();
};

如果你想要不同的大小,那么你应该动态分配内存,如果你不使用向量。

于 2013-04-04T09:50:15.833 回答
0

您应该使用动态分配:

b = new int *[a] ;
//memory allocated for  elements of each column.
for( int i = 0 ; i < a ; i++ )
   b[i] = new int[3];
于 2013-04-04T09:52:27.203 回答
0

如果你想依赖扩展,那么 ISO C99 允许通过扩展使用可变长度数组,看看它http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html,这个扩展数组被声明为任何其他自动数组,但长度不是常量表达式。

副作用是您的代码将使用获得此扩展名的 compile 进行编译。

于 2013-04-04T10:05:48.380 回答