我正在学习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] = { ...};
但这是很多工作。
它不是问题的重复项:错误:无法为数组指定显式的初始化程序,因为该问题询问一维数组,并且它提供了一种初始化数组的解决方案,bgal[0][0] = { ...}; bgal[0][1] = { ...};
因为它需要大量工作。我问是否还有另一种方法可以更快地做到这一点。
在寻找可能重复的问题之前,请仔细阅读问题。
继续进行评论,并根据以下问题进行讨论:错误C2536的变通办法:无法在Visual Studio 2013中为数组指定显式初始化程序
您可以使用类似这样的东西,尽管它不像一个或多个原始数组那么漂亮
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
您总是可以尝试使用带有初始化列表的矢量的矢量,例如:https : //ideone.com/lQ12a4
vector<vector<double> > a{
{ -0.066988739415,-0.872755765852,-0.483538914632 },
{ 0.492728466075,-0.450346958020, 0.744584633283 },
{ -0.867600811151,-0.188374601723, 0.460199784784 } };
我不知道这是否可以在您的编译器上正常工作,但是根据以下内容:https : //msdn.microsoft.com/en-US/library/hh567368.aspx应该可以。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句