【发布时间】:2017-03-11 22:37:26
【问题描述】:
虽然我怀疑这里的答案是重构,但由于时间限制,我想避免这种情况。
我有一个类 C,它公开继承自接口 A,公开继承自接口 B,公开继承自类 O。
O 有一个受保护的构造函数。 A 和 B 没有构造函数(或者至少我没有定义一个构造函数。它们是继承的吗?已删除?) C 有一个公共构造函数。调用上述构造函数会导致编译错误:
'B::B(void)': 试图引用已删除的函数
class C : public A {
public:
C(){};
~C(){};
}
C::C() {
this->property = value;
}
class O {
public:
virtual ~O(){};
protected:
O(){};
}
class B : public O {
public:
virtual ~B(){};
}
class A : public B {
public:
virtual ~A(){};
}
使用 Visual Studio 2015。
再次,如果可能的话,希望避免进行重大重构。有没有快速(ish)的解决方案?
编辑:调用C的构造函数时,形式为 O* 对象 = 新 C();
【问题讨论】:
-
“从接口 A 公开继承,从接口 A 公开继承” - 呃,什么? A 继承自自身?
-
C 正在尝试调用 B 的默认构造函数,该构造函数显然已被删除(如果没有您向我们展示就无法判断。)如果有办法实例化 B,最好在 C 的构造函数中显式执行.
-
也许这是相关的? stackoverflow.com/questions/733360/…
-
@user2357112 哎呀,继承自 A 继承自 B。现在已修复。
-
@DeiDei 我没有明确地为 A 或 B 编写构造函数,但我也没有删除它们。他们会继承O吗?他们会得到默认的 c'tors 吗?
标签: c++ inheritance constructor