0

私のクラスのヘッダーは

#ifndef _CENGINE_H
#define _CENGINE_H
#include "SFML\Graphics.hpp"
#include "CTextureManager.h"
#include "CTile.h"

class CEngine
{
private:
    //Create instance of CTextureManager
    CTextureManager textureManager;
    //Load textures
    void LoadTextures();
    //New tile
    CTile* testTile;

    bool Running; //Is running?
    sf::RenderWindow* window; //Create render window
public:
    CEngine(); //Constructor
    int Execute(); //Execute
    bool OnInit(); //On intialization
    void GameLoop(); //Main game loop
    void Render(); //Render function
    void Update(); //Update
};
#endif

これで私に与えている3つのエラーは次のとおりです。

cengine.h(8): エラー C2236: 予期しない 'クラス' 'CEngine'. 「;」を忘れましたか?

cengine.h(8): エラー C2143: 構文エラー: ';' がありません 前 '{'

cengine.h(8): エラー C2447: '{' : 関数ヘッダーがありません (古いスタイルの正式なリスト?)

エラーが明らかであることはわかっていますが、クラスに問題は見られません。私は疲れているので、おそらく本当に愚かです。

4

1 に答える 1

2

循環インクルードの問題のようです。CTextureManager.hまたはCTile.hお互いを含めますCEngine.hか?

これを解決するには、可能な場合は前方宣言を使用します。たとえば、クラスに含める必要はありませんCTile.h。次のようになります。

#ifndef CENGINE_H
#define CENGINE_H
#include "SFML\Graphics.hpp"
#include "CTextureManager.h"


class CTile;    //forward declaration instead of include

class CEngine
{
private:
    //Create instance of CTextureManager
    CTextureManager textureManager;
    //Load textures
    void LoadTextures();
    //New tile
    CTile* testTile;

    bool Running; //Is running?
    sf::RenderWindow* window; //Create render window
public:
    CEngine(); //Constructor
    int Execute(); //Execute
    bool OnInit(); //On intialization
    void GameLoop(); //Main game loop
    void Render(); //Render function
    void Update(); //Update
};
#endif

他の 2 つのヘッダーについても同様です。

また、_CENGINE_H有効な識別子ではありません。名前を に変更した方法に注意してくださいCENGINE_H

于 2012-12-03T18:14:26.577 に答える