以下代码可在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”,并说“期望类或 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

最佳答案

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

  • 在工作区 View 中右键单击该项目。
  • 在此弹出菜单底部附近选择“设置”。通用设置->编译器-> C++编译器选项
  • 单击以分号分隔的编译器开关列表,以显示椭圆,然后单击椭圆。
  • 单击-std = c++ 11
  • 的复选框

    10-08 07:52