【发布时间】:2014-06-10 04:03:53
【问题描述】:
我将直接深入研究代码。我得到了
“错误 C2143:语法错误:缺少 ';'在'*'之前
和
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 支持默认整数
这是我定义头文件的方式,因为我认为头文件声明本身存在一些问题。我在声明播放器对象指针的行上的 Source.h 文件中出现错误 - CPlayer* myplayer
首先,
Headers.h
#pragma once
#include <iostream>
#include <string>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
GameSetup.h
#pragma once
#include "Headers.h"
class CGameSetup
{
public:
CGameSetup(bool* _running,int ScreenWidth, int ScreenHeight);
~CGameSetup(void);
SDL_Window* GetWindow();
SDL_Renderer* GetRenderer();
void Begin();
void End();
private:
SDL_Window* _screen;
SDL_Renderer* _renderer;
};
Source.h
#pragma once
#include "Headers.h"
#include "GameSetup.h"
#include "Sprite.h"
#include <math.h>
#include "Player.h"
class CSource
{
public:
CSource(int ScreenWidth,int ScreenHeight);
~CSource(void);
void GameLoop();
CSprite* getPlayerSpriteReference();
SDL_Event getEventHandler();
int getMouseX();
int getMouseY();
private:
bool _running;
CPlayer* myplayer; // THIS IS WHERE I AM GETTING THE TWO ERRORS ON**
SDL_Event events;
CGameSetup* gameSetup;
CSprite* backgroundSprite;
int Mouse_X;
int Mouse_Y;
void Draw();
void Update();
};
Player.h
#pragma once
#include "Source.h"
namespace playerStates {
enum States {down=1,up,left,right,standing};
}
class CPlayer
{
public:
CPlayer(CGameSetup* gameSetup, int* p_MouseX, int* p_MouseY);
~CPlayer(void);
void playerMove();
void drawPlayerSprite();
CSprite* getPlayerSpriteReference();
private:
CSprite* playerSprite;
CGameSetup* gSetup;
SDL_Event events;
int* Mouse_X;
int* Mouse_Y;
int* newMousePos_X;
int* newMousePos_Y;
int currentTime;
bool movePlayer;
float GetDistance(float x1,float y1,float x2,float y2);
void SetPlayerState(int type);
};
这些是我拥有的 4 个头文件。有人可以告诉我声明包含头文件是否有任何问题,或者这些错误是否与我难以排除的其他问题有关!
【问题讨论】:
-
看起来像一个循环包含问题。 Source.h 和 Player.h 相互包含。
-
是的,100% 循环依赖问题。
-
但这不是我们使用 #pragma 一次以便摆脱循环问题的原因吗?
-
如果我在源文件中注释掉所有播放器类的声明,那么错误就消失了。
-
不,
pragma once(顺便说一句,这是非标准的)只是一个 include 保护。它会阻止标头的多个副本包含在同一个源文件中。
标签: c++