嗨,我有类似的东西:
enum abd {a,b,c};
class d {
private:
abd tab[3][3];
public:
d() {
tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} };
}
}
它大喊:
错误C2440:'=':无法从'initializer-list'转换为'abd'和 IntelliSense:初始化值太多。
我可能是瞎子,因为我找不到我的错误所以请告诉我什么是错的以及如何修复它。
答案 0 :(得分:2)
class d {
private:
abd tab[3][3];
public:
d() : tab { {a,a,a}, {a,a,a}, {a,a,a}} {}
};
<强>更新强>
似乎在使用
d() : tab { {a,a,a}, {a,a,a}, {a,a,a}} {}
是VS 2013中的问题。请参阅the bug report。
如果不支持,我能想到的唯一选择就是使用嵌套的for
循环来初始化tab
:
d()
{
for ( int i = 0; i < 3; ++i )
for ( int j = 0; j < 3; ++j )
tab[i][j] = a;
}
答案 1 :(得分:2)
此事{ {a,a,a}, {a,a,a}, {a,a,a} }
称为初始化列表,因为您只能在数组的初始化中使用它。
abd tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} };
答案 2 :(得分:1)
数组没有赋值运算符。你可以改写
class d {
private:
abd tab[3][3] = { {a,a,a}, {a,a,a}, {a,a,a} };
public:
d() {
}
};
如果编译器不支持此功能,则使用一些标准算法,例如std::fill
,为数组的元素赋值。
例如
#include <algorithm>
enum abd { a, b, d };
class d {
private:
abd tab[3][3];
public:
d() {
std::fill( reinterpret_cast<abd *>( tab ),
reinterpret_cast<abd *>( tab ) + 9,
a );
}
};
i