【发布时间】:2026-01-27 15:50:01
【问题描述】:
编译器抱怨 D 的构造函数被删除,因为格式不正确,为什么?
#include<iostream>
using namespace std;
class A
{
int x;
public:
A(int i) { x = i; }
void print() { cout << x; }
};
class B: virtual public A
{
public:
B():A(10) { }
};
class C: virtual public A
{
public:
C():A(10) { }
};
class D: public B, public C {
};
int main()
{
D d;
d.print();
return 0;
}
输出
main.cpp:37:4: 错误:使用已删除的函数 'D::D()' D d; ^ main.cpp:32:7: 注意:'D::D()' 被隐式删除,因为默认定义格式错误:class D: public B, public C { ^
【问题讨论】:
-
因为没有默认构造函数可供
D初始化这些基类。 -
因为A没有默认构造函数。
-
因为虚拟继承
D必须直接调用A的ctor并且没有默认的那个 -
不是直接欺骗但可能会有所帮助*.com/questions/17184514/…