c++ - 调用不带参数的构造函数有效,带参数则无效。为什么?

标签 c++ constructor

我有一个定义如下的类:

class Foo {

  private:
    boolean feature;

  public:
    Foo(boolean feature) : feature(feature) {}

  // ...
};

我正在尝试构造一个实例,作为另一个类的私有(private)属性:

class Bar {

  private:
    Foo foo(true);

    // ...
  };

这行不通。我在声明的行上得到 expected identifier before numeric constant。当我简单地从 Foo 的构造函数定义中删除参数并请求 Foo foo; 时,它起作用了。

为什么?

如何定义和声明一个带有 bool 参数的 Foo 实例?

最佳答案

您不能在类成员声明中使用该初始化语法;您只能使用 {}= 初始化成员。以下应该有效(假设支持 C++11 或更高版本):

Foo foo{true};
Foo foo = Foo(true);

关于c++ - 调用不带参数的构造函数有效,带参数则无效。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971901/

相关文章:

c++ - struct中的0个元素组成的数组

c++ - 为什么 INTMAX_MAX 在这里给出错误的结果?

c++ - Vtk图表在QT中中断, “no override found for ' vtkContextDevice2D”

java - 具有私有(private)构造函数的非静态类上的 NoClassDefFoundError

java - 不要在子类的构造函数中创建父类(super class)实例,但完全合法

c++ - 构造函数默认参数

c++ - 解压可变模板参数

c++ - 表初始化列表取 int,在用户定义的类中

c++ - C++ 中的矩阵和 vector 模板类