C ++标头错误C2238意外令牌';'

时间:2018-10-21 13:11:02

标签: c++

该行的PauseMenu头文件中存在C2238错误:Game *游戏; 它说';'是意外令牌,以及:C2143语法错误:缺少';'在同一行上的“ *”之前;我不知道这些文件有什么问题,我认为两个文件都正确。

PauseMenu.h头文件:

#pragma once
#include "EventHandler.h";
#include "MousePressEvent.h";
#include "RectElement.h";
#include "Engine.h";

class PauseMenu :
    public EventHandler
{
public:
    PauseMenu();
    void Show();
    void Hide();
    void onEvent(Event* event);
    void onEvent(MousePressEvent* event);

    Game* game;

private:
    RectElement* background;
    RectElement* resume;
    RectElement* options;
    RectElement* quit;

    bool visible = false;
};

Game.h标头文件

#pragma once;
#include "Engine.h";
#include <ctime>;
#include "GameLayer.h";
#include "TextElement.h";
#include "HUDManager.h";
#include <windows.h>;
#include "Collider.h";
#include "CircleCollider.h";
#include "BoxCollider.h";
#include "MouseMoveEvent.h";
#include "CollisionShapeHitEvent.h";
#include "EventHandler.h";
#include "MainMenu.h";
#include "FpsCounter.h";
#include "PauseMenu.h";
#define PI 3.14159265358979323846264338327950288;

class Game :
    public EventHandler
{
public:
    Game(bool dev);
    ~Game();
    void onEvent(Event* event);
    void onEvent(MouseMoveEvent* event);
    void onEvent(KeyPressEvent* event);
    void onEvent(KeyReleaseEvent* event);
    void onEvent(CollisionShapeHitEvent* event);

    MainMenu* mainMenu;
    PauseMenu* pauseMenu;
private:
    Player* player;
    Engine* engine;
};

3 个答案:

答案 0 :(得分:3)

biggestWord#include之后删除分号。实际上:如果找不到找不到分号的原因,请删除以#define开头的行后的所有分号。

我怀疑您是否需要#中包含的所有那些文件。但是您在game.h中缺少game.hpausemenu.h的前向声明中:

Game

答案 1 :(得分:0)

我想您在标头之间有一定的循环依赖。

要解决此问题,可以在class Game;之前的 PauseMenu.h 头文件中对class PauseMenu使用向前声明。

我猜这样,您仍然可能会遇到其他错误,但是您将跳过提到的错误

答案 2 :(得分:0)

尝试放置析构函数〜PauseMenu(){} 在课程结束时。