0

再編成と改善のためにプロジェクトを書き直していますが、何らかの理由で奇妙なエラーが発生します。

私はヘッダーを持っています:

//Main.h
#include "Errors.h"
class MainClass
{
    public:
        ErrorClass errors;
};


//Errors.h
class ErrorClass
{
    public:
        MainClass* mainClassPtr;
};


//Main.cpp
#include "Main.h"

//nothing except the constructor


//Errors.cpp
#include "Main.h"

//constructor only

元のプロジェクトでこれとまったく同じ設定を行っており、正常にコンパイルされますが、この新しいプロジェクト (まだ機能がない) ではエラーが発生します。

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

5 回 (合計 10 エラー)。これらはすべてErrors.hの 21 行目を指しています。

private:
    MainClass* mainClassPtr; //line 21

クリーンアップして再構築しようとしましたが、エラーが続きます。

これがプロジェクトで機能し、他のプロジェクトでは機能しないのはなぜですか。何が間違っているのでしょうか。どうすればこれを機能させることができますか?

4

2 に答える 2

2

MainClassで宣言を転送し、クラス定義にErrors.h末尾を追加する必要があります。;

//Errors.h

class MainClass; // forward declaration

class ErrorClass
{
    public:
        MainClass* mainClassPtr;

}; // trailing ;

また、ヘッダーにインクルード ガードを追加する必要があります。

于 2013-09-05T21:54:57.567 に答える
2

Errors.h で、前方宣言と呼ばれるものを作成する必要があります。

//Errors.h
   class MainClass;
// ^^^^^^^^^^^^^^^^ The forward declaration

   class ErrorClass
   {
    public:
        MainClass* mainClassPtr;
   //   ^^^^^^^^^    It is needed for here
   };
//  ^ Don't forget the semicolon here !

へのポインターであるメンバーがあるためMainClass、この型が存在することをコンパイラーに示すために前方宣言を行う必要があります。

于 2013-09-05T21:56:28.263 に答える