Я объявил и инициализировал константный массив символов в классе:
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
Чтобы сделать его совместимым с C ++ 98, вам нужно инициализировать нестатические константы класса вне объявления класса.
Вам нужно сделать компиляцию с -std=c++11
(за gcc
а также clang
). Если вы этого не сделаете, ваша программа будет проверена на соответствие старому стандарту C ++ 98 для обеспечения совместимости со старыми компиляторами.
Таким образом, он позволяет вам использовать функции C ++ 11 без флага, но предупреждает вас, чтобы вы не делали это случайно.
Дальнейшее объяснение:
Ваш код компилируется нормально, потому что это допустимый код, и компилятор может его скомпилировать. Компилятор пропускает предупреждение, чтобы сделать вас знать из-за того, что вы использовали функцию C ++ 11, потому что многие люди (как, к сожалению, мой университет) все еще используют устаревший компилятор, такой как gcc4.6, который еще не имеет полной поддержки C ++ 11. Это означает, что эти люди могут быть не в состоянии скомпилировать ваш код, который может вас заинтересовать (например, если ваш профессор должен скомпилировать ваше задание).
С -std=c++11
Отметьте, что вы говорите компилятору: «Это программа на C ++ 11, предназначенная для компиляции с помощью компиляторов, совместимых с C ++ 11». Таким образом, предупреждение становится излишним.