7

以下代码在 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”并说“期望一个类或命名空间”。

/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
4

3 回答 3

23

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

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

项目设置窗口的屏幕截图

于 2015-02-28T17:48:36.493 回答
4

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

例如,在 gcc 你应该有

gcc -std=c++11

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

于 2015-02-28T07:39:51.590 回答
0

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

g++ yourfile.cpp -std=c++11
于 2016-07-11T03:35:06.033 回答