我班级的标题是
#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:意外的'class''CEngine'。你忘记了';'吗?
cengine.h(8):错误C2143:语法错误:缺少';'在'{'
之前cengine.h(8):错误C2447:'{':缺少函数头(旧式正式列表?)
我知道错误是显而易见的,但我看不出课程有问题。我可能真的很蠢,因为我很累。
答案 0 :(得分: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
。