ошибки c2143, c4430 понятия не имею, почему

0

Я буду погружаться прямо в код. я осознаю

"ошибка 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 или эти ошибки связаны с чем-то другим, с которым у меня возникают проблемы при поиске неисправностей!

  • 5
    Похоже, круговой вопрос включения. Source.h и Player.h включают друг друга.
  • 1
    Да, проблема круговой зависимости 100%.
Показать ещё 5 комментариев
Теги:

1 ответ

3
Лучший ответ

Что здесь происходит, ваш компилятор входит в Player.h отмечая его как "не возвращайтесь сюда для этого дерева разбора", а затем сталкиваясь с Source.h.

В Source.h вы включаете Player.h но компилятор уже отметил Player.h как "не возвращайтесь сюда", поэтому он пропускается.
Когда линия CPlayer* myplayer; , компилятор понятия не имеет, что такое CPlayer и выбрасывает ошибку типа, потому что он предполагает, что это имя с типом int умолчанию.

Дерево разбора будет выглядеть (упрощено):

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

Разрешение круговой зависимости поможет вам решить эту проблему.

  • 0
    ВАУ! Большое спасибо профессионалам C ++! :)
  • 0
    Поэтому я изменил свой player.h, удалив source.h и добавив gamesetup.h и sprite.h. Это решило проблему. Как еще я мог решить эту проблему?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню