使用非默认Ctor的类类成员初始化

时间:2018-04-17 19:48:59

标签: c++ class constructor definition

我对类成员声明感到困惑。

在以下示例中,当我声明" A m_a;"怎么了?根据我的理解,它尚未被称为ctor。我仍然无法理解上一代码行中的错误(B ctor实现)?

示例我有两个类:

class A{
   A(int a);
   ...
};

class B{
  B(int b);
  A m_a;
  ...
};

这就是我想做的事情:

B::B(int b): m_a(b){}

我收到多个错误:

candidate expects 1 arguments, 0 provided
candidate: constexpr 
only constructors take member initializers
...

2 个答案:

答案 0 :(得分:1)

正确的语法是使用成员变量的名称,而不是其类型。 Type仅用于基类。

B::B(int b): m_a(b){}

B被定义为:

class B : public A {
  B(int b);
};

使用

B::B(int b): A(b){}

将是正确的语法。

答案 1 :(得分:1)

如果要至少放置以分号结尾的分号并使用正确的访问说明符并正确定义B类的约束,那么代码将被编译。

这是一个示范程序

#include <iostream>

class A{
public: 
   A(int a) : x( a ) {}
private:   
   int x;
};

class B{
public: 
  B(int b);
private:  
  A m_a;
};

B::B(int b): m_a(b){}

int main() 
{
    A a( 10 );
    B b( 10 );

    return 0;
}