non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Red = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Green = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Blue = 255;
Не уверен, почему это не работает.
struct color {
int Red = 255;
int Green = 255;
int Blue = 255;
};
Включить c ++ 11 или:
struct Color
{
int Red;
int Green;
int Blue;
Color() : Red(255), Green(255), Blue(255) {}
};
Инициализаторы нестатических элементов данных — это функция, которая существует только в спецификации языка C ++ 11. Компилятор, который вы используете, по умолчанию не работает в режиме C ++ 11. Чтобы переключить ваш компилятор в режим C ++ 11, вы должны указать -std=c++11
(или же -std=gnu++11
) опция командной строки. Это то, что говорит вам ваш компилятор (я бы добавил, однозначно).
В версиях языка, предшествующих C ++ 11, такой функции нет. Вот почему это «не работает».
Вам нужно включить C ++ 11 или добавить -std=c++11
флаг для компиляции, потому что то, что вы пытаетесь сделать, доступно только в C ++ 11
До C ++ 11 вы могли только инициализировать нестатические элементы данных в списке инициализаторов элементов конструктора. В C ++ 11 вы можете использовать инициализаторы с фигурными или равными скобками, как показано в вашем коде. Однако, если ваш NSDM имеет инициализатор с фигурными или равными скобками и появляется в списке инициализаторов членов, инициализатор с фигурными или равными скобками игнорируется. Следовательно, следующее будет работать как для C ++ 03, так и для C ++ 11:
struct Color
{
int Red;
int Green;
int Blue;
Color() : Red(255), Green(255), Blue(255) {}
};
Однако, поскольку у вас есть готовый компилятор C ++ 11, используйте -std=c++11
чтобы включить его.