2012-02-28 13 views
0

私はちょうど確立プロジェクトと地獄を結びつけました。私はいくつかのものを私のヘッダファイル内で動かし、現在、私は#indef、#define、#endifを各ヘッダファイルに使用しているにもかかわらず、いくつかのオブジェクトが他のオブジェクトを見ることができないという事実に就いています。クラスを避けてお互いが見えない? C++

古いファイルの1つでは、WorldというクラスでRegionというクラスを使用しています。

Worldクラスは他のクラスを見ることができないと不満を持ち続けていたので、単にclass Regionを含めて渡すことができました。その上に。

このようなものを避ける方法はありますか?

ありがとうございます。

+0

私たちは、コードとエラーメッセージを表示する必要があります。このあいまいな説明では、問題の根源になるかもしれない何十ものものがあります。 – zwol

+0

私たちはおそらくこの一般的な質問にあなたを助けることはできません。ヘッダ( '#include" Region.h "')またはクラス( 'class Region;')を宣言したことを意味しますか? – Beta

+2

リンカエラーよりもコンパイルエラーの方がサウンドを記述する(曖昧に)問題です(特に#includeディレクティブを追加して解決した場合)。また、 "#indef"ではなく "#ifdef"を意味することを願っています。 – aldo

答えて

2

私がインクルード/依存関係の問題を避ける方法の1つは、できる限りクラス/構造体定義を最小限に宣言しようとすることです(ポインター/参照のみですが、Aldoが指摘してくれてありがとうございます)。

class foo 
{ 
    bar* barObject; 
}; 

明らかに、バーは以前のある時点で定義する必要があります。 barのヘッダファイルをインクルードするのではなく、単にfooの定義の直前に次の行を追加するだけです。

class bar; 

これはバーが定義されていないことに不満からコンパイラを防止するだけでなく、含まれることが全体ヘッダーを必要としません。

私はこれが最小限であると判断しましたpeskyのには、循環依存関係やその他の問題がある場合に発生する可能性のある問題が含まれています。

あなたの提供する情報で特定の問題を診断することは非常に困難ですが、これは出発点となる可能性があるため、場合によっては役立つ場合もあります。

もっと読み: http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-INC-1.shtml

+0

フォワード宣言(呼び出されたもの)は、使用した例では実際には機能しません。クラスfooにポインタやバーへの参照が含まれていても動作しますが、値でバーが含まれているとは限りません。その場合、コンパイラはbarの完全宣言を必要とします。 – aldo

+0

私のせいで、私はそれを完全に忘れていました。私は編集します –

関連する問題