【问题标题】:warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default] [duplicate]警告:非静态数据成员初始化器仅适用于 -std=c++11 或 -std=gnu++11 [默认启用] [重复]
【发布时间】:2016-07-21 02:15:39
【问题描述】:

我刚刚在我的机器上安装了最新版本的 cygwin 和 eclipse luna。它工作正常,我能够运行我的项目。但是,当我构建它们时,我收到了我不明白的警告。例如,以下是我从“c++ Primer”一书的站点获得的头文件“Sales_item.h”中的警告:

warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 [enabled by default]
     Sales_item() = default;
                    ^
../src/Sales_item.h:70:27: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
     unsigned units_sold = 0; // explicitly initialized
                           ^
../src/Sales_item.h:71:22: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
     double revenue = 0.0;
                      ^
Finished building: ..

这些警告是什么意思?我应该做点什么吗?

【问题讨论】:

  • 您是否将标志 -std=c++11-std=c++1y 传递给编译器?
  • “我应该做点什么吗?”是的 - 将 -std=c++11 添加到编译器的命令行中。
  • 嗯,不,那是什么?以及如何做到这一点?
  • Project->Properties->C++ Build->Misc Options

标签: c++ eclipse c++11 cygwin eclipse-cdt


【解决方案1】:

-std=c++0x-std=c++11-std=c++1y 添加到您的编译器标志中。

你可以看到编译器说:

defaulted and deleted functions only available with -std=c++11 or -std=gnu++11

终端编译示例:

g++ -std=c++0x main.cpp -o myExe

在 Eclipse 中,正如 πάντα ῥεῖ 所建议的,您可以这样做:

Project ->Properties ->C++ Build ->Misc Options

或者,在我的 Kepler Eclipse 中,可以右键单击该项目,然后:

Properties ->C++ Build -> Settings

在命令文本框中,您可以看到您正在使用的编译器。你也可以在那里写编译器标志。

如需了解更多信息,请阅读 answer,根据 Baum mit Augen 的建议。

【讨论】:

  • 我必须为每个项目都这样做吗?
  • 我认为是的,但如果您找到不这样做的方法,请告诉我@user3263252。但是,我的小经验表明,对每个项目都这样做并不是什么大不了的事。 :)
  • 是的,它并没有真正做任何事情,它不像那些警告会阻止 c++11 代码运行。只是让我有点震惊,因为我在使用 mingw 时没有遇到这些警告
  • 如果没有启用,为什么会说“默认启用”?
猜你喜欢
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2021-05-11
  • 1970-01-01
  • 2016-03-27
相关资源
最近更新 更多