1

コンパイルエラーの原因となるファイルがいくつかありますが、次のことができますか?

header1.h

class Class1{
public:
void function1(Class1 &);
};

header2.h

class Class2{
public:
void function2(Class2 &, Class1 &);
};

cpp2.cpp

#include "header2.h"
void Class2::function2(Class2 & my2Class, Class1 & my1Class){};

main.cpp

#include "header1.h"
#include "header2.h"

// functions

エラーは、header2.hがClass1をタイプとして何も認識していないことを示しています。インクルードを使用せずに、または両方のクラスを同じファイルに配置せずに、このヘッダーファイルでタイプClass1のオブジェクトを宣言するにはどうすればよいですか(これらは完全に分離されており、main内で呼び出される内部関数のみを満たす必要があります)。

ありがとう!

4

2 に答える 2

7

前方宣言を使用できます。

class Class1; //forward declare Class1
class Class2{
public:
void function2(Class2 &, Class1 &);
};

型のパラメーターを関数に渡す場合、型が完全に定義されている必要はありません。

于 2012-04-05T13:49:22.783 に答える
0

すべてのヘッダーに、情報が必要な他のヘッダーを含めますが、循環参照や宣言の繰り返しを避けるための前処理定義を含めます。たとえば、header2 は

#ifndef FUNCS_H

#define FUNCS_H

#include "header1.h"

    class Class2{
    public:
    void function2(Class2 &, Class1 &);
    };
#endif

これは、C ++ですべてのヘッダーを行う方法です

于 2012-04-05T13:56:54.557 に答える