以下代码在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的构建输出。如果它出现乱码,它会指向&#34; SampleEnum&#34;在变量的实例化中,说&#34;期望一个类或命名空间&#34;。
/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 :(得分:20)
有必要将-std = c ++ 11传递给编译器以启用C ++ 11功能。以下是在Codelite中执行此操作的步骤:
答案 1 :(得分:4)
如果您使用的是C ++ 11扩展,编译器希望它被标记。没有它,他们可能会发出警告和错误。这是因为某些C ++ 11更改不是向后兼容的,例如使用auto
。
例如,在gcc中你应该有
gcc -std=c++11
检查你的编译器是否也不应该有这样的参数!
答案 2 :(得分:0)
我想这是因为您的默认标准版本不是c ++ 11。要更改为c ++ 11,如果您使用终端,则应键入以下命令:
g++ yourfile.cpp -std=c++11