gpt4 book ai didi

c++ - c2143, c4430 错误不知道为什么

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:20 25 4
gpt4 key购买 nike

我将直接研究代码。我得到了

"error C2143: syntax error : missing ';' before '*'

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

这是我定义头文件的方式,因为我认为头文件声明本身存在一些问题。我在 Source.h 文件中声明播放器对象指针的那一行出现错误 -CPlayer* 我的播放器

首先,

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 个头文件。有人可以告诉我声明的包含头文件是否有任何问题,或者这些错误是否与我很难排除的其他问题有关!

最佳答案

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

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

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

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

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

关于c++ - c2143, c4430 错误不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com