我想在C ++中使用一个常量大小的二维数组作为类成员。我在构造函数中初始化它时遇到了问题。
以下是我的非工作尝试:
1)
class A {
public:
int a[2][2];
A();
};
A::A() {
a = {{1,2},{2,4}};
}
收益率:error: assigning to an array from an initializer list
2)。
class A {
public:
int a[2][2];
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
收益率:invalid array assignment
3。)
class A {
public:
int **a;
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
收益率:cannot convert ‘int [2][2]’ to ‘int**’ in assignment
我来自C背景。我知道我可以使用std::vector
并且我知道这种方法的缺点但是因为这是我的练习,我想知道如何使用普通数组。我应该补充一点,我想稍后在这个数组上工作。我想更改存储的值,但不大小。也许这也很重要(我在正确的位置找到const
可能会有所帮助?)。
答案 0 :(得分:7)
如果你有C ++ 11,你可以在构造函数定义中使用这种语法:
A() : a{{1,2}, {3, 4}} {}
如果你没有C ++ 11,你将需要坚持邪恶的旧方法:
A() {
a[0][0] = 1;
// etc
}
第一个例子也使用构造函数init-list,它应该总是用来初始化成员而不是在构造函数体中初始化它们。
答案 1 :(得分:1)
试试这个,它适用于二维数组(在标准C ++中):
class A {
public:
int a[2][2];
A();
};
typedef struct{ int a[4]; } array_t;
A::A() {
int at[2][2] = {{1,2},{2,4}};
*(array_t*)a = *(array_t*)at;
}
侨 安吉洛
答案 2 :(得分:1)
构造函数中的各种多维数组:
private static final int THREAD_ID = 10000;
TrafficStats.setThreadStatsTag(THREAD_ID);
答案 3 :(得分:0)
您的第一个变体非常接近正确的C ++ 11语法:
A::A()
: a{{1,2},{2,4}}
{
}
答案 4 :(得分:0)
补充以前的答案(你们这么快):
正如编译器所说,你在第1和第2例中尝试做的是array assignment
,不允许这样做;
但我想提请你注意你的第三个案例,这是一个严重的误解,特别是来自你C
。
为a
分配一个指向局部变量的指针?