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中,当您实例化a
B
时,
B.a
的值是多少?
a1
a2
对于
a1
a2
@XJY95
a
,而不是
a1
a2
<代码>一个也必须有一个值。那会是什么?是的,具体代码是
a1
,我没有仔细查看代码,谢谢!