クラスが相互に依存する非常に複雑なクラス階層があります。それぞれ C と A のインスタンスを返すメソッドを含む 2 つの抽象クラス A と C があります。継承されたクラスでは、共変型を使用したいと考えています。この場合、継承関係を前方宣言する方法がわからないため、これが問題になります。
"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* を戻り値の型として保持する方法はありますか (方法があることは直感的にわかります)。