15

我有一门课,例如:

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 [默认启用] [错误]:从初始化列表分配给数组

我在网上查了一下,真的找不到解决这个问题的方法。我不想在类文件中编辑类(有点违背了目的)。有什么帮助吗?

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

4

2 回答 2

21

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

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

auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
于 2013-03-24T19:58:25.160 回答
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 设为私有并使用函数来访问它的数据并插入/修改内容是一个很好的做法。但这取决于你。

于 2013-03-24T20:12:30.497 回答