错误:从初始化列表分配给数组

时间:2013-03-24 19:48:48

标签: c++ arrays assign

我有一个类如:

class dialog
{
    public:
    double dReturnType[][5][3];
};

#include <cstdlib>
#include <iostream>
include <string>

using namespace std;
#include "dialog.h";

int main(int argc, char *argv[])
{
    dialog People;
    People.dReturnType[0][1] = {1.2,2.3,6.6};
    return 0;
}

它返回:

  

[警告]扩展初始化列表仅适用于-std = c ++ 11或   -std = gnu11 [默认启用] [错误]:从初始化列表中分配数组

我在网上看了一下,真的找不到解决这个问题的办法。我不希望在类文件中编辑类(有点打败目的)。有什么帮助吗?

注意:该类位于单独的项目文件中

2 个答案:

答案 0 :(得分:18)

初始化程序列表仅在初始化期间可用。

如果您想在初始化后使用std::initializer_list

auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);

答案 1 :(得分:0)

除非您使用的是c ++ 11,否则无法初始化扩展列表。

如果我是你的好习惯是使用*代替空“[]”并在知道大小时使用new或malloc分配内存。程序中的dReturn类型是matices的指针。

而且你只给了一个载体成员的完整列表。

People.dReturnType[0]={1.2,2.3,6.6};

这更有意义。

尝试封装和使用/创建初始化函数,这些函数也可以帮助您做到这一点。 C ++会将所有0设置为开始,但您可以执行一个函数并调用:

dialog People("the_atributes_are_here").

将dReturnType设为私有并使用函数来访问数据并插入/修改内容是一个很好的实践。但这取决于你。