调用没有参数的构造函数,但参数不行。为什么?

时间:2015-04-30 15:32:00

标签: c++ constructor

我的课程定义如下:

class Foo {

  private:
    boolean feature;

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

  // ...
};

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

class Bar {

  private:
    Foo foo(true);

    // ...
  };

这不起作用。我在声明的第一行得到expected identifier before numeric constant。当我从Foo的构造函数定义中删除参数并请求Foo foo;时,它可以正常工作。

为什么?

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

前C ++ 11的方法是:

class Bar {
  public:
    Bar() : foo(true){} //initialization
  private:
    Foo foo; //no parameter
};

加成:

class Bar {
  private:
    Foo foo(); //<- This is a function declaration for a function
               //named foo that takes no parameters returning a Foo.
               //There is no Foo object declared here!
};