C++ 没有默认构造函数的继承?
由于继承的类没有默认构造函数,因此我显式调用继承的类的构造函数,并且在C++ 没有默认构造函数的继承?,c++,inheritance,constructor,C++,Inheritance,Constructor,由于继承的类没有默认构造函数,因此我显式调用继承的类的构造函数,并且在B的构造函数处仍然有红色下划线(在VScode中): 类“A”不存在默认构造函数 类A是否必须获得默认构造函数?有办法解决这个问题吗 这是简化代码: class A { public: int a_; A(int a): a_(a) {} }; class B: public A { public: A A1; A A2;
B
的构造函数处仍然有红色下划线(在VScode中):
类“A”不存在默认构造函数
类A
是否必须获得默认构造函数?有办法解决这个问题吗
这是简化代码:
class A
{
public:
int a_;
A(int a): a_(a)
{}
};
class B: public A
{
public:
A A1;
A A2;
B(int a1, int a2): A1(a1), A2(a2)
{}
};
错误是关于
A
没有默认构造函数。因为没有,所以无法初始化B
的A
部分。你需要像这样的东西:
B(int a, int a1, int a2): A(a), A1(a1), A2(a2)
{}
B
的构造函数初始化器列表还需要初始化基类A
。例如,B(inta1,inta2):A(42),a1(a1),a2(a2){}
。如果继承的A
未列出,编译器将尝试使用不接受任何参数的“默认构造函数”来构造它-这是不存在的。@Peter感谢您的评论,因为您的评论与Nikos C的答案相同,我只是回答了,所以只需使用任何合理类型的参数(如A(A))馈送A()
)
在您的情况下,继承是否有效?我有点把Python代码翻译成C++。在python版本中,类A
的\uuuuu init\uuuu
没有使用默认值初始化所有参数,但类A
的函数仍然继承到python中的类B
@XJY95中,当您实例化aB
时,B.a
的值是多少?a1
和a2
对于a1
和a2
@XJY95a
,而不是a1
和a2
<代码>一个也必须有一个值。那会是什么?是的,具体代码是a1
,我没有仔细查看代码,谢谢!