Ошибка: назначение массива из списка инициализаторов

У меня есть такой класс, как:

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 [включено по умолчанию] [Ошибка]: назначение массива из списка инициализаторов

Я немного посмотрел в Интернете и действительно не мог найти способ обойти это. Я предпочел бы не редактировать класс внутри его файла класса (вроде как побеждает цель). Любая помощь?

Примечание: класс находится в отдельном файле проекта

15

Решение

Списки инициализатора можно использовать только во время инициализации.

Если вы хотите использовать std::initializer_list после инициализации:

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

Другие решения

Вы не можете инициализировать расширенный список, если вы не на C ++ 11.

И если бы я был для вас, то хорошей привычкой является использование * вместо пустого «[]» и выделение памяти, когда вы знаете размер (с новым или malloc). Тип dReturn в вашей программе является указателем matices.

И вы даете полный список только одному члену вектора.

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

Это имеет больше смысла.

Попробуйте инкапсулировать и использовать / создавать функции инициализатора, которые помогут вам сделать это тоже. C ++ поместит все 0 в начале, но вы можете сделать функцию и вызвать:

dialog People("the_atributes_are_here").

Это хорошая практика, чтобы сделать dReturnType приватным и использовать функции для доступа к данным и вставки / изменения объектов. Но это зависит от вас.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector