Как включить функции C++11 в Codelite

Следующий код компилируется и запускается в Xcode 5 и Visual Studio 2013. Мне интересно попробовать Codelite, но Codelite не скомпилирует следующую программу (проблема, так как я работаю с перечислениями в моем проекте). Насколько я понимаю, Codelite использует тот же компилятор, что и Xcode.

Является ли код действительным для С++ 11? Почему Codelite не может его скомпилировать?

#include <iostream>

namespace abc
{
    namespace xyz
    {
        enum class SampleEnum
        {
            SomeValue = 0,
            SomeOtherValue = 1
        };
    }
}

int main(int argc, char **argv)
{
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
    return 0;
}

Вот вывод сборки из Codelite. В случае искажения он указывает на слово «SampleEnum» в экземпляре переменной и говорит «ожидается класс или пространство имен».

/bin/sh -c 'make -j8 -e -f  Makefile'
----------Building project:[ ClangTest - Debug ]----------
codelite-cc /usr/bin/clang++   -c  "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall  -o ./Debug/main.cpp.o -I. -I.
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
                enum class SampleEnum
                     ^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: expected a class or namespace
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
                             ~~~~~~~~~~^
1 warning and 1 error generated.
make[1]: *** [Debug/main.cpp.o] Error 1
make: *** [All] Error 2
2 errors, 1 warnings

person Matthew James Briggs    schedule 28.02.2015    source источник
comment
Кажется, Codelite не любит С++ 11: «предупреждение: перечисления с областью действия являются расширением С++ 11»   -  person    schedule 28.02.2015
comment
Похоже, ваш компилятор не работает в режиме C++11, попробуйте добавить переключатель -std=c++11   -  person M.M    schedule 28.02.2015
comment
Я думаю, вы должны поместить свое редактирование в качестве ответа на свой вопрос. Действительно, это может помочь кому-то в будущем, но вы можете пропустить его чтение, думая, что это продолжение вашего вопроса.   -  person CygnusX1    schedule 28.02.2015
comment
@CygnusX1 CygnusX1 Я последовал вашему предложению и перенес свои инструкции Codelite в ответ.   -  person Matthew James Briggs    schedule 28.02.2015


Ответы (3)


Необходимо передать компилятору -std=c++11, чтобы включить функции C++11. Вот шаги, чтобы сделать это в Codelite:

  • Щелкните правой кнопкой мыши проект в представлении рабочей области.
  • Выберите «Настройки» в нижней части этого всплывающего меню. Общие настройки->Компилятор->Параметры компилятора C++
  • Щелкните список переключателей компилятора, разделенных точкой с запятой, чтобы открыть многоточие, и щелкните многоточие.
  • Установите флажок для -std=c++11

скриншот окна настроек проекта

person Matthew James Briggs    schedule 28.02.2015
comment
Просто комментарий: CodeLite не компилирует codelite — это IDE, которая вызывает компилятор (в вашем случае gcc). Так что название немного вводит в заблуждение. - person Eran; 01.03.2015
comment
Это идеальный/стандартный способ в CodeLite вызвать поддержку компилятора для C++11. Кстати: как видите, здесь можно выбрать множество опций компилятора. - person htredleaf; 07.12.2015

Если вы используете расширения C++11, компиляторы хотят, чтобы они были помечены. Без этого они могут выдавать предупреждения и ошибки. Это связано с тем, что некоторые изменения C++11 не имеют обратной совместимости, например. использование auto.

Например, в gcc у вас должно быть

gcc -std=c++11

Проверьте, не должен ли ваш компилятор иметь такой параметр!

person CygnusX1    schedule 28.02.2015
comment
--std=c++11 также допустимо - person CygnusX1; 28.02.2015
comment
Кстати, вы можете обновить свой компилятор GCC. Последняя версия 4.9 - person Basile Starynkevitch; 28.02.2015
comment
Хороший вопрос, @BasileStarynkevitch. GCC 4.9 также поддерживает C++14, что очень удобно. - person набиячлэвэли; 01.03.2015

Я полагаю, это потому, что ваша стандартная версия по умолчанию не С++ 11. Чтобы перейти на С++ 11, если вы используете свой терминал, вы должны ввести следующую команду:

g++ yourfile.cpp -std=c++11
person Don Wayne    schedule 11.07.2016