我有一个2D数组,我声明了类私有成员的一部分。当我调用构造函数时,我开始为2D数组赋值。但每次我这样做,我都会遇到错误C2059。为了确保没有其他因素导致该错误,我注释掉了该行,并且编译器完成了一个二进制文件。
tried:
Variable[row] = { 0, 1, 2, 3};
Variable[row][] = { 0, 1, 2, 3};
Variable[row][4] = { 0, 1, 2, 3};
没有运气,任何线索。提前谢谢。
答案 0 :(得分:3)
此语法仅用于创建对象。
int array[4] = {1, 2, 3, 4};
创建数组后,必须使用循环为其赋值。
这是一个简短的例子:
class A
{
int array[4];
public:
A()
{
// Here, array is already created
// You can _assign_ values to it
}
};
如果要在构造函数中实例化时给它赋值,唯一的方法是使用初始化列表。不幸的是,你不能用静态数组做到这一点。
请参阅此this thread.
答案 1 :(得分:1)
不幸的是,我们还不能正确初始化作为类成员的数组。我不确切地知道你的声明如何,但这里有一个例子:
class X
{
int Variable[3][4];
public:
X()
{
const int temp[][4] = { { 1, 2, 3, 4}, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
const int sz = sizeof(Variable)/sizeof(**Variable);
std::copy(*temp, (*temp) + sz, *Variable);
}
};
答案 2 :(得分:0)
由于你的问题不够明确,我所能做的就是展示一个简单的例子。
将2D数组初始化为
//you may "optionally" provide the size of first dimension
int arr[][4] = {
{1,2,3,4},
{11,12,13,14},
{21,22,23,24}
};
并且被收录为,
for ( int i = 0 ; i < 3 ; ++i )
{
for ( int j = 0 ; j < 4 ; ++j )
{
cout << arr[i][j] << endl;
}
}
ideone上的在线演示:http://www.ideone.com/KmwOg
你在做同样的事吗?