2017-02-06 3 views
0

私は以下の問題があります:C++、recoursive #include

私は2つのクラスを持っています。クラス2にはオブジェクトクラス2のタイプの配列が含まれています。

class1.h:

class Class1{ 
    ... 
    friend void Class2::foo(); 
    } 

class2.h:

%include "class1.h" 

    class Class2{ 

    ... 
    Class1 * array[10]; 
    void foo() 
    } 
さらに私はこのようには1.何かクラスの友人ないだろうクラスなし2の関数を書く行う必要があります

問題は、class1の定義において、プログラムのdosentがまだclass2を認識しているということです。 class1.hにclass2.hをインクルードすることはできません。なぜなら、私は再帰的なインクルードを作成するからです。何か案は?

+0

「#include」というスペルのように、もう少し努力してください。 –

答えて

0

使用forward declaration:ファイルclass2.hで

  • 、ファイルclass2.cppでclass Class1;
  • #include "class1.h"を変更、あなたがこれを行うことができ#include "class1.h"

を追加し、Class2理由Class1のポインタ(インスタンスではない)を使用します。

+0

ありがとうございました。 私はそれを試しましたが、class1.hファイルのclass2の前方宣言を逆にしてみました:) –

+0

@KarolŻurowski:あなたは大歓迎です。Class2の中にClass1の実際のインスタンスが使用されていない限り、このクラスのサイズとメモリのレイアウトは 'Class2'のサイズとメモリのレイアウトに影響しないので、実際には' Class1'のヘッダを含める必要はありません。ポインタは単なるポインタであり、よく知られたサイズ(通常は4または8バイト)を持ち、コンパイラは 'Class1'についての詳細を知らずに' Class2'のサイズとメモリレイアウトを推測できます。 –