显然我不能在另一个类的公共部分声明一个类的实例。
我有两个类:Game和ScreenManager。如果我从Game.h中删除以下行,那么一切都会成功编译:
ScreenManager screenManager;
如果我不这样做,我会收到错误。这些是我在构建时遇到的错误消息:
1>c:\users\dziku\documents\visual studio 2010\projects\test allegro game\test allegro game\game.h(29): error C2146: syntax error : missing ';' before identifier 'screenManager'
1>c:\users\dziku\documents\visual studio 2010\projects\test allegro game\test allegro game\game.h(29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\dziku\documents\visual studio 2010\projects\test allegro game\test allegro game\game.h(29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Game.h:
#pragma once
#include"ScreenManager.h"
#include<allegro5\allegro.h>
#include<allegro5\allegro_image.h>
#include<allegro5\allegro_font.h>
#include<allegro5\allegro_ttf.h>
#include<allegro5\allegro_primitives.h>
class Game
{
public:
static const int WINDOW_WIDTH=800;
static const int WINDOW_HEIGHT=640;
static const int FPS=60;
float FRAME_INTERVAL;
bool isExiting;
float currentTime,prevTime,lag;
ALLEGRO_DISPLAY* display;
ALLEGRO_EVENT_QUEUE* eventQueue;
ALLEGRO_EVENT ev;
ScreenManager screenManager;
Game(void);
~Game(void);
static Game &getInstance();
void initialize();
void gameLoop();
void cleanup();
void update(ALLEGRO_EVENT &ev);
void render(ALLEGRO_DISPLAY* display);
};
和ScreenManager.h:
#pragma once
#include"Game.h"
#include<allegro5\allegro.h>
#include<vector>
#include<map>
class ScreenManager
{
public:
ScreenManager(void);
~ScreenManager(void);
void initialize();
void update(ALLEGRO_EVENT &ev);
void render(ALLEGRO_DISPLAY* display);
void unloadContent();
};
我真的不知道发生了什么,自昨天以来,我一直在其他项目中继续遇到类似的错误。我必须做错事,但我不知道任何帮助将不胜感激。
答案 0 :(得分:1)
你能解释为什么标题"ScreenManager.h"
包含海量"Game.h"
?
ScreenManager.h:
#pragma once
#include"Game.h"
如果ScreenManager类成员函数使用类Game的成员函数的某些数据成员,那么您应该将类定义和uts成员函数分开。定义。只在类定义中声明成员函数,并在一些单独的模块中实现它们的实现。如果你想要内联指定函数说明符,你可以将它们内联。
或者你可以在标题ScreenManager中将类游戏声明为
class Game;
并再次在单独的模块中定义类ScreeManager的成员函数。