c ++ 11 — нестатические инициализаторы членов данных Переполнение стека

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;
};

0

Решение

Включить c ++ 11 или:

struct Color
{
int Red;
int Green;
int Blue;
Color() : Red(255), Green(255), Blue(255) {}
};
5

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

Инициализаторы нестатических элементов данных — это функция, которая существует только в спецификации языка C ++ 11. Компилятор, который вы используете, по умолчанию не работает в режиме C ++ 11. Чтобы переключить ваш компилятор в режим C ++ 11, вы должны указать -std=c++11 (или же -std=gnu++11) опция командной строки. Это то, что говорит вам ваш компилятор (я бы добавил, однозначно).

В версиях языка, предшествующих C ++ 11, такой функции нет. Вот почему это «не работает».

3

Вам нужно включить C ++ 11 или добавить -std=c++11 флаг для компиляции, потому что то, что вы пытаетесь сделать, доступно только в C ++ 11

0

До 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 чтобы включить его.

0