2015-02-28 2 views
5

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

Действительно ли код действителен для C++ 11? Почему Коделит не может его скомпилировать?

#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 
+0

Кажется Codelite не нравится C++ 11: «предупреждение: область действия перечислений являются C++ 11 extension ' –

+1

Похоже, ваш компилятор не работает в режиме C++ 11, попробуйте добавить переключатель '-std = C++ 11' –

+1

Я думаю, вы должны поместить свое Редактирование в качестве ответа на свой вопрос. Действительно, это может помочь кому-то в будущем, но может пропустить чтение, думая, что это продолжение вашего вопроса. – CygnusX1

ответ

18

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

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

screenshot of the project settings windows

+0

Просто комментарий: CodeLite не «компилирует» кодолит - это IDE, которая вызывает компилятор (в вашем случае gcc). Таким образом, название немного вводит в заблуждение. – Eran

+0

Это идеальный/стандартный способ в CodeLite для вызова поддержки компилятора для C++ 11. BTW: здесь можно выбрать множество параметров компилятора, как вы можете видеть. – htredleaf

4

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

Например, в GCC вы должны иметь

gcc -std=c++11 

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

+0

'--std = C++ 11' также действителен – CygnusX1

+1

Кстати, вы можете обновить свой компилятор GCC. Последняя версия - 4.9 –

+0

Хорошая точка, @BasileStarynkevitch. GCC 4.9 также поддерживает C++ 14, что полезно. –

0

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

g++ yourfile.cpp -std=c++11 
Смежные вопросы