Visual C ++ Studio 2010无缘无故地显示构建错误

时间:2014-07-05 16:41:42

标签: c++ visual-studio-2010 class compiler-errors

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

我有两个类: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();

};

我真的不知道发生了什么,自昨天以来,我一直在其他项目中继续遇到类似的错误。我必须做错事,但我不知道任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你能解释为什么标题"ScreenManager.h"包含海量"Game.h"

ScreenManager.h:

#pragma once

#include"Game.h"

如果ScreenManager类成员函数使用类Game的成员函数的某些数据成员,那么您应该将类​​定义和uts成员函数分开。定义。只在类定义中声明成员函数,并在一些单独的模块中实现它们的实现。如果你想要内联指定函数说明符,你可以将它们内联。

或者你可以在标题ScreenManager中将类游戏声明为

class Game;

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