显然,我不能在另一个类的公共(public)部分中声明一个类的实例。

我有两节课:游戏和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();

};

我真的不知道发生了什么,自昨天以来,我在其他项目中一直遇到类似的错误。我一定在做错事,但是我没有任何线索,因此不胜感激。

最佳答案

您能解释为什么 header "ScreenManager.h"包含heafder "Game.h"吗?

ScreenManager.h:

#pragma once

#include"Game.h"

如果ScreenManager类成员函数使用Game类成员函数的某些数据成员,则应分开类定义和uts成员函数的定义。仅在类定义中声明成员函数,并将其实现放在单独的模块中。如果需要,可以使它们内联,以指定函数说明符内联。

或者您可以将 header ScreenManager中的Game类声明为
class Game;

并在单独的模块中再次定义ScreeManager类的成员函数。

关于c++ - Visual C++ Studio 2010无故显示生成错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24588521/

10-12 02:10