C ++类的默认构造函数,调用另一个类的另一个默认构造函数

时间:2014-10-27 15:19:55

标签: c++ constructor

我有2个类A和B.我试图使用B类的默认构造函数来调用A类的默认构造函数来初始化B类中A类的值。

class A
{
    A();    
    int x;
}

A::A()
{
    //initialized x
    x=10;
}

class B
{
    B();
    A aobj;
}

B::B()
{
    //Calling class A's  default constructor to initialize B's aobj.
    aobj();
}

我收到了对#(; aobj)'的不匹配电话。请帮我解决。

2 个答案:

答案 0 :(得分:3)

实际上,除非您明确构造成员,否则您不需要显式默认构造成员。如果您想要显式构造成员,无论是默认构造还是其他构件,您需要将初始化放入成员初始化列表中:

B::B()
    : aobj() {
}

函数体中的表达式aobj()尝试在成员aobj上使用函数调用运算符。这样做可能是合理的,例如,当aobj属于std::function<void()>类型时。

答案 1 :(得分:2)

在语句的上下文中,aobj()不会尝试构造aobj变量,而是尝试使用operator()运算符重载来调用它。

相反,尝试在B::B()的初始化列表中进行构造:

B::B() : aobj()
{
}

但请注意,这是多余的,因为如果从初始化列表中省略,将隐式调用成员对象的默认构造函数。也就是说,这个构造函数会做同样的事情:

B::B() { }