我有一个类如:
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 [默认启用] [错误]:从初始化列表中分配数组
我在网上看了一下,真的找不到解决这个问题的办法。我不希望在类文件中编辑类(有点打败目的)。有什么帮助吗?
注意:该类位于单独的项目文件中
答案 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设为私有并使用函数来访问数据并插入/修改内容是一个很好的实践。但这取决于你。