私のプログラムは、2つの派生クラス、ChoiceNodeとOpponentNodeを持つ抽象クラスBaseNodeを持っています。私はChoiceNodeから呼び出された場合はOpponentNodeを返す必要があり、OpponentNodeから呼び出された場合はChoiceNodeを返す "returnOpposite"という純粋仮想関数をBaseNodeに書きたいと思います。 OpponentNode.h別の派生クラスの共変戻りタイプの関数を実装するには?
#include "BaseNode.h"
class OpponentNode: public BaseNode {
ChoiceNode& returnOpposite();
}
で
BaseNode.h で
class BaseNode {
protected:
virtual BaseNode& returnOpposite() = 0;
}
ChoiceNode.h
で
#include "BaseNode.h"
class ChoiceNode: public BaseNode {
OpponentNode& returnOpposite();
}
ここに私の問題は、対戦相手/ ChoiceNodeはの知識を持つ必要があるということです通常は前方宣言を使用して解決される反対のクラスですが、compiのためには反対のクラスがBaseNodeと共変であることを認識するためには、クラスに関する文脈情報が必要です。
それは、この情報が適切なヘッダファイルを含めることによって提供されていることを私の理解です。しかし、これを行うと、何らかの循環依存性が生じます。 ChoiceNodeにはChoiceNodeを含める必要があるOpponentNodeを含める必要がありますが、ヘッダーガードがあれば、OpponentNodeはChoiceNodeクラス宣言を知らないようです。
この見た目のcatch-22をどのように解決すればよいですか?循環依存に関与せずにクラスについてのコンテキスト情報を提供する方法はありますか?
私はあなたのコードのフォーマットがうんざりしていると思いますか? –
@KeithMありがとう。どういうわけか私は最後の近くでそれを台無しにしました。 –
解決策を適用すると、循環依存関係の問題が解決しました。ありがとうございます。 –