当B b(0);被调用时,我希望它调用默认构造函数来初始化受保护的数据成员data_,但它显示错误。
B b(0);
error: no matching function for call to ‘B::B(int)’ candidate expects 0 arguments, 1 provided
D d(1, 2);的情况也是如此。x一个一个一个一个x一个一个二个x我应该更改什么来纠正此问题?
D d(1, 2);
uubf1zoe1#
默认构造函数是一个可以在没有参数的情况下调用的构造函数,如B()或D()。(整数数据=0)或空B(),其中data_的默认值将是int类型的默认值。您调用的构造函数是用户定义的(使用参数B(int)或D(int,int)),而用户忘记定义它。每个类负责其引入的新变量,因此D和B的构造函数应为:
B()
D()
data_
int
B(int)
D(int,int)
D
B
B(int data) :data_(data) {}; D(int data, int info) :B(data), info_(info) {}; //on data you call constructor of B since B added data_ variable
您的Print()应该是B中的virtual,并且必须是D中的overridden
Print()
virtual
overridden
1条答案
按热度按时间uubf1zoe1#
默认构造函数是一个可以在没有参数的情况下调用的构造函数,如
B()
或D()
。(整数数据=0)或空B(),其中data_
的默认值将是int
类型的默认值。您调用的构造函数是用户定义的(使用参数B(int)
或D(int,int)
),而用户忘记定义它。每个类负责其引入的新变量,因此D
和B
的构造函数应为:您的
Print()
应该是B中的virtual
,并且必须是D
中的overridden