扩展初始值设定项列表被视为函数

extended initializer lists being seen as functions

本文关键字:列表 函数 扩展      更新时间:2023-10-16

我正在尝试编译一个开源项目,但我从 g++ 中遇到了这个问题

error: function definition does not declare parameters

代码是这样的

#include <iostream>
namespace hi {
  class hello {
 public:
    bool first { true };
  };
}
int main(int argc, char *argv[])
{
  hi::hello h
  std::cout << "output: " << h.first << std::endl;
  return 0;
}
编译

时会产生与开源项目代码相同的编译问题

g++ -O2 bools.cpp -o bools -std=c++0x

但是,如果我尝试使用相同的选项编译此代码,它将按应有的方式编译和运行

#include <iostream>
int main(int argc, char *argv[])
{
  bool value { true };
  std::cout << "output: " << value << std::endl;
  return 0;
}

我在 Ubuntu 64 位上使用 g++ 4.6.3。

谢谢你的时间。

gcc 4.7 中添加了对非静态数据成员初始值设定项的支持。您可以在此处查看gcc支持哪些版本的 C++0x/C++11 功能的列表。此功能的行说:

Non-static data member initializers   |  N2756 |    GCC 4.7

这在gcc 4.7和更大范围内工作得很好,请在此处观看。