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.hCTile.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 回答