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