c++ - C++初始化二维数组

标签 c++ arrays c++11 visual-studio-2013

<分区>

我正在学习 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 } }

但它不起作用。

有什么建议吗?也许我不能使这个 vector 恒定或静态,或者...

我试过 bgal[0][0] = { ...}; bgal[0][1] = { ...}; 但工作量很大。

这不是问题 Error: cannot specify explicit initializer for array 的重复因为该问题询问的是一维数组,它提供了一种使用 bgal[0][0] = { ...}; 初始化数组的解决方案; bgal[0][1] = { ...}; 这是很多工作。我问是否有另一种方法可以更快地做到这一点。

在查找可能重复的问题之前,请仔细阅读问题。

最佳答案

从评论中继续讨论,并根据这个问题:Workaround for error C2536: cannot specify explicit initializer for arrays in 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

您始终可以尝试使用具有初始化列表的 vector vector ,如下所示: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它应该。

关于c++ - C++初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33320047/

相关文章:

c++ - cudaOccupancyMaxPotentialBlockSizeVariableSMem 一元函数

c++ - 调用 delete[] 时某些东西导致堆损坏,但我正确设置了数组的维度

c++ - C++ 中的 std::thread 与 Go 语言中的 goroutine?

c++ - 如果在 C++ 中的基类中添加虚函数或非虚函数,是否必须重新编译整个类层次结构?

c++ - 为什么 std::map::operator[] 赋值需要无参数构造函数?

c++ - 无符号类型的 Eigen 运算

c++ - wdk 中的新建和删除

c++ - 如何为两个不同的 vector 取值?

javascript 二维数组 - 排序和合并

javascript - 检查变量是否未定义