我想在 C++ 中使用一个固定大小的二维数组作为类成员。不过,我在构造函数中初始化它时遇到问题。
这是我的非工作尝试:
1.)
class A {
public:
int a[2][2];
A();
};
A::A() {
a = {{1,2},{2,4}};
}
产生:错误:从初始化列表分配给数组
2.)
class A {
public:
int a[2][2];
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
产生:无效的数组赋值
3.)
class A {
public:
int **a;
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
yields: 无法在赋值中将‘int [2][2]’转换为‘int**’
我来自C背景。我知道我可以使用 std::vector
并且我知道这种方法的缺点,但是因为这对我来说是一个练习,所以我想知道如何让它与普通数组一起工作。我应该补充一点,我想稍后处理这个数组。我想更改存储的值,但不是大小。也许这也很重要(我想在正确的地方使用 const
会有所帮助?)。
最佳答案
如果你有 C++11,你可以在构造函数定义中使用这个语法:
A() : a{{1,2}, {3, 4}} {}
如果你没有 C++11,你将需要坚持那些邪恶的旧方法:
A() {
a[0][0] = 1;
// etc
}
第一个示例还使用构造函数初始化列表,它应该始终用于初始化成员而不是在构造函数主体中初始化它们。
关于C++:构造函数中的多维数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22975215/