【问题标题】:C++ Error 'nullptr was not declared in this scope' in Eclipse IDEEclipse IDE 中的 C++ 错误“未在此范围内声明 nullptr”
【发布时间】:2012-04-05 17:45:53
【问题描述】:

我正在运行 Eclipse Helios,并且安装了 g++-4.6。希望 g++4.6 实现了 C++ 11 特性我没有错。我创建了一个使用 nullptr 和 auto 关键字的 C++ 项目。该构建给出以下错误:-

../{filename}.cpp:13:13: error: ‘nullptr’ was not declared in this scope

../{filename}.cpp:14:2: warning: ‘auto’ will change meaning in C++0x; please remove it [-Wc++0x-compat]

实际上,直到昨天它还在建设中。我今天不知从何而来。请帮我解决这个问题。

【问题讨论】:

  • g++ 的确切版本是什么,您使用什么编译选项?
  • 请发布一个展示此行为的代码示例,否则我们会在这里尝试读取茶叶。
  • 我正在使用 g++ 4.6,并想象如下代码行:- int* ptr = nullptr;自动 x = 123;

标签: c++ g++ eclipse-cdt


【解决方案1】:

根据GCC page for C++11

要启用 C++0x 支持,请将命令行参数 -std=c++0x 添加到您的 g++ 命令行。或者,要启用除 C++0x 扩展之外的 GNU 扩展,请将 -std=gnu++0x 添加到您的 g++ 命令行。 GCC 4.7 及更高版本也支持 -std=c++11 和 -std=gnu++11。

你是用-std=gnu++0x编译的吗?

【讨论】:

  • 我尝试添加 -std=gnu++0x 和 -std=c++0x 命令行参数,但遇到了同样的问题。我在 Project Properties -> C/C++ Build -> Discovery Options -> Compiler Invocation Arguments 下添加了它。那是正确的地方吗?
  • 可能,但听起来另一个答案更基于现实。 :)
  • 嗨 Rob,我现在注意到一件事。尽管我已在项目属性 -> C/C++ 构建 -> 发现选项 -> 编译器调用参数下添加了编译器参数 -std=c++0x,但 IDE 并未选择编译器参数。所以我在终端中尝试了命令行 build 'g++ "../CPP.cpp" -std=gnu++0x -std=c++0x' ,它编译得很好;生成成功运行的二进制文件。因此 IDE 不考虑指定的编译器选项。生成的 makefile 不包含编译器参数 -std=c++0x。不确定如何强制 IDE 考虑提供的编译器参数!
  • 您只需要其中一个选项,我建议您使用 -std=c++11or -std=c++0x`,具体取决于您的编译器版本。 gnu++0x 启用非标准扩展。
  • 终于知道该怎么做了。在 Project Properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous 下添加 -std=c++0x 编译器参数。现在可以了!但是如何为所有 C++ 项目默认添加这个标志呢?有人吗?谢谢 Vivek Ragunathan
【解决方案2】:

终于知道该怎么做了。在 Project Properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous 下添加了 -std=c++0x 编译器参数。现在可以了!

但是如何为所有 C++ 项目默认添加这个标志呢?有人吗?

【讨论】:

  • 您是否查看了 Window -> Preferences -> C/C++ -> Build -> Settings?
  • 很遗憾我没有这个选项。
  • 如何使用 cmake 处理这种情况?
  • @UserK 如果您的编译器支持 c++11:set (CMAKE_CXX_STANDARD 11)
【解决方案3】:

您使用的是 g++ 4.6 版本,您必须调用标志 -std=c++0x 才能编译

g++ -std=c++0x *.cpp -o 输出

【讨论】:

    【解决方案4】:

    这是实际的编译器错误还是代码分析错误?有时代码分析可能有点粗略并报告无效错误。

    要关闭项目的代码分析,请在项目资源管理器中右键单击您的项目,单击属性,然后转到 C/C++ 常规选项卡,然后是代码分析。然后单击“使用项目设置”并禁用您不希望使用的设置。

    另外,您确定使用 C++11 编译器进行编译吗?

    【讨论】:

    • 赞成反对反对票。这几乎肯定是问题所在。
    • 谢谢。这个问题我遇到过很多次了,觉得值得一提。
    • 我在 Eclipse 项目属性的 C/C++ 常规选项卡下没有看到代码分析项。我正在使用 g++4.6。希望实现 C++11 功能,特别是 nullptr 和 auto。谢谢。
    • 有意思,你的eclipse是什么版本的?要找出答案,请转到帮助 -> 关于 Eclipse。我在“Build id:20120216-1857”上,看到它没有问题。
    • 终于知道该怎么做了。在 Project Properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous 下添加 -std=c++0x 编译器参数。现在可以了!但是如何为所有 C++ 项目默认添加这个标志呢?有人吗?谢谢 Vivek Ragunathan
    【解决方案5】:

    转到设置 -> 编译器... 并将标志添加到“让 g++ 遵循即将到来的 C++0x ISO C++ 语言标准 [std=c++0x]

    【讨论】:

      【解决方案6】:

      我在“-c -fmessage-length=0”之后添加了“,-std=c++0x”,在Project Properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous下。不要忘记添加逗号“,”作为分隔符。

      【讨论】:

        【解决方案7】:

        尝试使用不同版本的 gcc 对我有用 - 在我的情况下是 gcc 4.9。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-16
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多