Предупреждения инициализаторов массива C ++

Я объявил и инициализировал константный массив символов в классе:

class grid {
const char test[11] = {'s', 'e', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

Мой код работает, но я продолжаю получать предупреждения компилятора:

инициализаторы не статических элементов данных доступны только в C ++ 11

а также

расширенные списки инициализаторов, доступные только в C ++ 11

Я знаю, что это не вопрос потому что я компилирую по стандарту C ++ 11, но мне любопытно, что до C ++ 11 о моем коде.

Я надеюсь, что кто-то может дать мне некоторое представление и предложить, что я могу сделать, чтобы сделать этот код C ++ 98 «дружественным».

Также по запросу моя команда компилятора:

> g++ -o test main.cpp

3

Решение

Чтобы сделать его совместимым с C ++ 98, вам нужно инициализировать нестатические константы класса вне объявления класса.

2

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

Вам нужно сделать компиляцию с -std=c++11 (за gcc а также clang). Если вы этого не сделаете, ваша программа будет проверена на соответствие старому стандарту C ++ 98 для обеспечения совместимости со старыми компиляторами.

Таким образом, он позволяет вам использовать функции C ++ 11 без флага, но предупреждает вас, чтобы вы не делали это случайно.

Дальнейшее объяснение:

Ваш код компилируется нормально, потому что это допустимый код, и компилятор может его скомпилировать. Компилятор пропускает предупреждение, чтобы сделать вас знать из-за того, что вы использовали функцию C ++ 11, потому что многие люди (как, к сожалению, мой университет) все еще используют устаревший компилятор, такой как gcc4.6, который еще не имеет полной поддержки C ++ 11. Это означает, что эти люди могут быть не в состоянии скомпилировать ваш код, который может вас заинтересовать (например, если ваш профессор должен скомпилировать ваше задание).

С -std=c++11 Отметьте, что вы говорите компилятору: «Это программа на C ++ 11, предназначенная для компиляции с помощью компиляторов, совместимых с C ++ 11». Таким образом, предупреждение становится излишним.

2

По вопросам рекламы [email protected]