我正在学习C ++而且我遇到了问题。我在类头文件中有这个声明:
double bgal[3][3] =
{ { -0.066988739415,-0.872755765852,-0.483538914632 },
{ 0.492728466075,-0.450346958020, 0.744584633283 },
{ -0.867600811151,-0.188374601723, 0.460199784784 } };
使用Visual Studio 2015编译很好,但使用Visual Studio 2013它无法编译。我收到这条消息:
cannot specify explicit initializer for arrays
我认为问题与Visual Studio 2013不支持C ++ 11和编译器错误C2536有关。
我试图在类构造函数中移动该初始化,但它不起作用。这样:
MyClass::MyClass() : bgal { { -0.066988739415, -0.872755765852, -0.483538914632 },
{ 0.492728466075, -0.450346958020, 0.744584633283 },
{ -0.867600811151, -0.188374601723, 0.460199784784 } }
但它不起作用。
有什么建议吗?也许我不能使这个矢量恒定或静止,或者......
我尝试了bgal[0][0] = { ...}; bgal[0][1] = { ...};
,但这是很多工作。
这不是问题Error: cannot specify explicit initializer for array的重复,因为该问题询问了一维数组,它提供了一个解决方案,用bgal[0][0] = { ...}; bgal[0][1] = { ...};
初始化数组,这是一项很多工作。我问是否还有其他方法可以更快地完成它。
在寻找可能的重复问题之前,请仔细阅读该问题。
答案 0 :(得分:3)
继续根据评论进行讨论,并根据这个问题:file a feature request
你可以使用这样的东西,但它不像原始数组或数组那样漂亮
array<array<double, 3>, 3> a({
array<double,3>({ -0.066988739415,-0.872755765852,-0.483538914632 }),
array<double,3>({ 0.492728466075,-0.450346958020, 0.744584633283 }),
array<double,3>( { -0.867600811151,-0.188374601723, 0.460199784784 }) });
为了使它更漂亮,你总是可以定义一个辅助宏
#define DD array<double,3>
array<array<double, 3>, 3> a({
DD({ -0.066988739415,-0.872755765852,-0.483538914632 }),
DD({ 0.492728466075,-0.450346958020, 0.744584633283 }),
DD( { -0.867600811151,-0.188374601723, 0.460199784784 }) });
#undef DD
您可以尝试使用带有初始化列表的向量向量,如下所示:Workaround for error C2536: cannot specify explicit initializer for arrays in Visual Studio 2013
vector<vector<double> > a{
{ -0.066988739415,-0.872755765852,-0.483538914632 },
{ 0.492728466075,-0.450346958020, 0.744584633283 },
{ -0.867600811151,-0.188374601723, 0.460199784784 } };
我不知道这是否适用于你的编译器,但根据这个:https://ideone.com/lQ12a4它应该。
答案 1 :(得分:0)
这是一个演示程序,显示数组成员初始化的数组类型。您可以选择允许使用编译器初始化数组的方法。:)
#include <iostream>
struct A
{
double bgal[3][3]
{ { -0.066988739415,-0.872755765852,-0.483538914632 },
{ 0.492728466075,-0.450346958020, 0.744584633283 },
{ -0.867600811151,-0.188374601723, 0.460199784784 }
};
};
struct B
{
B() : bgal { { -0.066988739415,-0.872755765852,-0.483538914632 },
{ 0.492728466075,-0.450346958020, 0.744584633283 },
{ -0.867600811151,-0.188374601723, 0.460199784784 } }
{
}
double bgal[3][3];
};
int main()
{
A a;
B b;
for ( const auto &row : a.bgal )
{
for ( double x : row ) std::cout << x << ' ';
std::cout << std::endl;
}
std::cout << std::endl;
for ( const auto &row : b.bgal )
{
for ( double x : row ) std::cout << x << ' ';
std::cout << std::endl;
}
}
程序输出
-0.0669887 -0.872756 -0.483539
0.492728 -0.450347 0.744585
-0.867601 -0.188375 0.4602
-0.0669887 -0.872756 -0.483539
0.492728 -0.450347 0.744585
-0.867601 -0.188375 0.4602
它是使用在线MS编译器编译的