以下代码可在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中执行此操作的步骤: