【问题标题】:inheriting from an interface with no constructor inheriting from a class with protected constructor从没有构造函数的接口继承 从具有受保护构造函数的类继承
【发布时间】: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


【解决方案1】:

我相信这与"default constructor cannot be referenced" in Visual Studio 2015有关

通过为接口提供受保护的构造函数来解决问题。不理想但有效,谢谢大家。

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 2016-04-07
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多