在c++中初始化二维数组

Initialize a two dimensional array in C++

本文关键字:二维数组 初始化 c++      更新时间:2023-10-16

我正在学习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编译器

编译