如何在 Codelite 中启用 C++11 特性

How to Enable C++11 Features in Codelite

以下代码在 Xcode 5 和 Visual Studio 2013 中编译并运行。我有兴趣试用 Codelite,但 Codelite 不会编译以下程序(这是我工作时的问题在我的项目中使用范围枚举)。据我了解,Codelite 使用与 Xcode.

相同的编译器

代码是否符合 C++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" 并说 "expected a class or namespace".

/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

如果您使用的是 C++11 扩展,编译器希望对其进行标记。没有它,他们可能会抛出警告和错误。那是因为 C++11 的一些更改不向后兼容,例如使用 auto.

例如,在 gcc 中你应该有

gcc -std=c++11

检查你的编译器是否也不应该有这样的参数!

需要将 -std=c++11 传递给编译器以启用 C++11 功能。以下是在 Codelite 中执行此操作的步骤:

  • 在工作区视图中右键单击项目。
  • Select 此弹出菜单底部附近的设置。通用设置->编译器->C++编译器选项
  • 单击以分号分隔的编译器开关列表以显示省略号并单击省略号。
  • 单击 -std=c++11 的复选框

我想这是因为您的默认标准版本不是 c++11。要更改为 c++11,如果您使用的是终端,则应输入以下命令:

g++ yourfile.cpp -std=c++11