1

定義: Class.h

#ifndef CLASS_H_
#define CLASS_H_

#include "Class2.h"    
#include <iostream>

struct Struct1{
};

struct Struct2{
};

class Class1 {
};

#endif 

次に、これを使用する他のヘッダー ファイル:

#ifndef CLASS2_H_
#define CLASS2_H_

#include "Class.h"

class Class2 {
    public:
        Class2( Struct1* theStruct, Struct2* theStruct2); //Can't find struct definitions
    private:
};

#endif 

これらは同じディレクトリにあります。そして、それらの構造体定義が表示されません! それらは私にはグローバルな範囲にあるように見えます。Class2がそれらを見ることができない理由を誰かが私に説明できますか? コンパイラは、クラスのヘッダーが見つからないことについて不平を言っているわけではないので、それはあり得ません。

4

1 に答える 1

4

以下は、完全なコードの推測です。それを投稿してください。そうすれば、より良いお手伝いができます。


万が一、完全なコードが次のようになっている場合は、変更する必要があります

#ifndef CLASS_H_
#define CLASS_H_

#include <iostream>
#include "Class2.h"

struct Struct1{
};

struct Struct2{
};

class Class1 {
};

#endif

CLASS_H_マクロは既に定義されているため、Class2.h別のヘッダーには含まれず、その時点Struct1Struct2はまだわかりません。可能であれば前方宣言を使用して修正してください。たとえば、Class2.h次のようになります。

#ifndef CLASS2_H_
#define CLASS2_H_

// no need for that file
// #include "Class.h"

// forward-declarations suffice    
struct Struct1;
struct Struct2;

class Class2 {
    public:
        Class2( Struct1 theStruct, Struct2 theStruct2);
    private:
};

#endif

他のヘッダーがどちらの定義も必要としない場合はClass2、前方宣言も使用します。定義は必要ありません (つまり、宣言で十分です)。

  • 参照とポインター
  • 定義ではない関数宣言の関数パラメーター

メンバーにアクセスしたい場合、 を取得したい場合、または値渡しなどのパラメータ タイプを持つ関数を定義したい場合に必要sizeofです。Class2Struct1

于 2009-08-15T16:39:15.213 に答える