在c++中初始化二维数组
Initialize a two dimensional array in C++
我正在学习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的副本:不能指定显式的数组初始化器,因为这个问题问的是一维数组,它提供了一个解决方案,用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 }) });
为了让它更漂亮,你可以定义一个helper宏
#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 of vector和初始化的list: 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它应该。
下面是一个演示程序,演示数组类型的数据成员初始化。您可以选择允许使用编译器初始化数组的方法:)
#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编译器
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- C++中的多维数组初始化
- 将大型二维数组初始化为C++中的所有值
- 如何在编译时初始化静态二维数组
- C++ 多维数组初始化
- 如何在 c++ 中初始化构造函数中的二维数组
- 多维数组初始化使用索引技巧
- 二维数组未正确初始化
- 从二维数组中的char*初始化c++字符串时,读取大小为1的无效值
- 二维数组初始化
- 如何将一个巨大的二维数组初始化为类中的空间
- 初始化和删除二维数组
- 二维数组初始化值
- 使用指针的多维数组初始化
- 动态二维数组初始化
- 二维数组初始化与c++的混淆
- 二维数组初始化错误
- C++:构造函数中的多维数组初始化
- 多维数组初始化