c2143,c4430错误没有线索为什么

时间:2014-06-10 04:03:54

标签: c++

我会直接深入研究代码。我正在

  

“错误C2143:语法错误:缺少';'在'*'之前

  

错误C4430:缺少类型说明符 - 假设为int。注意:C ++没有   支持default-int

以下是我如何定义头文件,因为我认为头文件声明本身存在一些问题。我在我声明我的播放器对象指针的行上的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个头文件。有人可以告诉我,如果在声明包含头文件时有任何问题,或者这些错误是否与我正在进行故障排除的其他事情有关!

1 个答案:

答案 0 :(得分:4)

这里发生的事情是你的编译器进入Player.h将其标记为“不要再回到此解析树”,然后遇到Source.h

Source.h中,您加入Player.h ,编译器已将Player.h标记为“不要回到这里”,以便跳过它。
当命中行CPlayer* myplayer;时,编译器不知道CPlayer是什么并抛出类型错误,因为它假定它是一个默认int类型的名称。

解析树看起来像(简化):

CPlayer.h
 -- Source.h
  -- Cplayer.h -- Skipped, #pragma once

解决循环依赖关系将为您解决问题。