Я буду погружаться прямо в код. я осознаю
"ошибка 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 файла заголовка, который у меня есть. Может кто-нибудь, пожалуйста, скажите мне, есть ли какие-либо проблемы в объявлении заголовочных файлов include или эти ошибки связаны с чем-то другим, с которым у меня возникают проблемы при поиске неисправностей!
Что здесь происходит, ваш компилятор входит в Player.h
отмечая его как "не возвращайтесь сюда для этого дерева разбора", а затем сталкиваясь с Source.h
.
В Source.h
вы включаете Player.h
но компилятор уже отметил Player.h
как "не возвращайтесь сюда", поэтому он пропускается.
Когда линия CPlayer* myplayer;
, компилятор понятия не имеет, что такое CPlayer
и выбрасывает ошибку типа, потому что он предполагает, что это имя с типом int
умолчанию.
Дерево разбора будет выглядеть (упрощено):
CPlayer.h
-- Source.h
-- Cplayer.h -- Skipped, #pragma once
Разрешение круговой зависимости поможет вам решить эту проблему.