我有一个非常复杂的类层次结构,其中类相互依赖:有两个抽象类 A 和 C,其中包含一个分别返回 C 和 A 实例的方法。在他们继承的类中,我想使用协变类型,在这种情况下这是一个问题,因为我不知道一种方法来前向声明继承关系。
我得到一个“test.cpp:22: error: invalid covariant return type for 'virtual D* B::outC()'” - 错误,因为编译器不知道 D 是 C 的子类。
class C;
class A {
public:
virtual C* outC() = 0;
};
class C {
public:
virtual A* outA() = 0;
};
class D;
class B : public A {
public:
D* outC();
};
class D : public C {
public:
B* outA();
};
D* B::outC() {
return new D();
}
B* D::outA() {
return new B();
}
如果我将 B::outC() 的返回类型更改为 C*,则示例编译。有什么方法可以将 B* 和 D* 作为继承类中的返回类型(对我来说有一种方法很直观)?