私は現在、fooとbarの2つのクラスを持っています。 Fooはそのメソッドの1つでbarのインスタンスを使用し、barはそのコンストラクタでfooのインスタンスを使用します。しかし、これはコンパイルされません。私は循環依存があることを理解しているので、fooのメソッドがヘッダファイルで宣言される前に、fooの内側のbarを宣言することでこれを打ち破ろうとしました。これはソースファイルのfooのメソッドでバーやコンポーネントを実際に使用できないために失敗しました。私はその後、バーを必要とするソースファイルのすべてが既に定義されているように並べ替えを試みました。次にbarのすべての定義を入れてから、バーを使用するfooのメソッドを定義しました。それは同じ理由で失敗しました。私は私がfoo ::メソッドの定義では、バーのインスタンスへの参照を削除すると、コードがコンパイルされ、正常に実行されることを指摘したいと思いC++のクラス定義における循環依存関係の回避
// Header.h
class foo{
class bar;
void method(bar& b);
};
class bar{
bar(foo& f, double d);
};
// Source.cpp
#include Header.h
// stuff defining foo that I need for bar in the form foo::foo(...){...}
// stuff defining bar that I need for foo::method
void foo::method(bar& b){
// do stuff with foo and b
}
:ここでは、これまで私のコードの簡易版です。
私の具体的な例では、fooクラスが均質座標のベクトルとして、barクラスが四元数として使用されています。クォータニオンクラスは、そのコンストラクタでベクトルと回転角を使用し、ベクトルクラスはその回転メソッドで四元数を使用します。
依存関係を削除せずにこれをコーディングする方法はありますか?依存関係の1つを削除するだけですか?
'foo'の前に' bar'を宣言するとコードが正常に動作するはずです。(内ではありません) – vu1p3n0x