扩展初始化列表被视为函数

时间:2013-09-29 01:34:58

标签: c++ gcc c++11

我正在尝试编译一个开源项目,但我从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 64bit上使用g ++ 4.6.3。

谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

gcc 4.7中添加了对non-static data member initializers的支持。您可以看到 C ++ 0x / C ++ 11 功能gcc支持哪些版本here的列表。此功能的行说明:

Non-static data member initializers   |  N2756 |    GCC 4.7

这在gcc 4.7及更高版本中效果非常好,请查看它here