次の各ステートメントには、対応するヘッダー ファイルの周りにガードが含まれています。
C は B を拡張し、B をサブクラス化して A へのポインタを取得できるようにしますが、A には B のサブクラスであるいくつかのフィールドがあります。
私の現在の解決策は、B を void 配列に格納し、実行時の型情報に基づいて正しいオブジェクトを返すテンプレート メソッドを使用することです。しかし、C が A, Ahead Of Time(Compile time)にリンクする必要がある場合でも、A が C フィールドを持つ方法があるかどうかを知りたいです。
オブジェクト指向プログラミングのコースをいくつか受講しましたが (ほとんどが Java でした)、特に C++ に焦点を当てたコースはありませんでした。
これはおそらく一般的な問題であり、この質問はおそらく既にここで尋ねられ、回答されていますが、そのような解決策を見つけるためにどのキーワードを使用すればよいかわかりません.
ああ
//#include "C.h" //would cause cyclical include
class A {
public:
A();
virtual ~A();
/**Type must be checked at runtime, because otherwise cyclical includes occur*/
template <class T> T* getComponent();
private:
//C* aComponent; //desired implementation
//Current implementation
void* components;
unsigned char componentCount;
};
Bh
#include "A.h"
class B {
public:
B();
virtual ~B();
A* getRoot();
private:
A* aRoot;
};
チャンネル
#include "B.h"
class C : B {
public:
B();
virtual ~B();
};
私が使用した他の OOP 言語は、そのような問題を舞台裏で解決するだけで、C++ ではビルド順序が正しい必要があります。この質問と漠然と似ている他の質問への回答をいくつか見ましたが、それらはちょっと不明確でした。回答を簡潔にしてください。