Ошибка: присвоение массиву из списка инициализаторов
У меня есть класс, например:
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;
}
Он возвращает:
[Warning] расширенные списки инициализаторов доступны только с -std = С++ 11 или -std = gnu11 [включено по умолчанию] [Ошибка]: присвоение массиву из списка инициализаторов
Я немного искал его в Интернете и действительно не мог найти способ обойти это. Я бы предпочел не редактировать класс внутри него в файле класса (вроде бы поражает цель). Любая помощь?
Примечание: класс находится в отдельном файле проекта
Ответы
Ответ 1
Списки инициализаторов используются только во время инициализации.
Если вы хотите использовать std::initializer_list
после инициализации:
auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
Ответ 2
Вы не можете инициализировать расширенный список, если не находитесь на С++ 11.
И если бы у вас была хорошая привычка - использовать * вместо пустого "[]" и выделять память, когда вы знаете размер (с новым или malloc). dReturn type в вашей программе - указатель на матчи.
И вы даете полный список только одному члену вектора.
People.dReturnType[0]={1.2,2.3,6.6};
Это имеет смысл.
Попробуйте инкапсулировать и использовать/создавать функции инициализатора, которые помогут вам это сделать. С++ поместит все 0 в начало, но вы можете сделать функцию и вызвать:
dialog People("the_atributes_are_here").
Хорошо, чтобы частные функции и функции dReturnType могли использовать данные и вставлять/изменять вещи. Но это зависит от вас.