gpt4 book ai didi

c++ - 如何在C++中正确继承基类并覆盖虚函数

转载 作者:行者123 更新时间:2023-12-04 14:52:16 25 4
gpt4 key购买 nike

我是 c++ 的新手,我开始研究 SDL2 库来制作一个简单的平台游戏。我遇到了类继承的问题。我有一个父类 (GameObj) 和一个子类 (Player)。当我尝试从 Player 继承 GameObj 时,编译器告诉我基类未定义。我试图覆盖 Player 类中的更新函数,但是由于我收到“基类未定义”错误,它还告诉我覆盖函数没有覆盖任何内容。

GameObj.h

#pragma once
#include "Game.h"

class GameObj
{
public:
GameObj(const char* path);

~GameObj();

virtual void update() = 0;

void render();

protected:
SDL_Texture* tex{ nullptr };
SDL_Rect srcR;
SDL_Rect dstR;
};

GameObj.cpp

#include "GameObj.h"

GameObj::GameObj(const char* path)
{
tex = TextureManager::LoadImage(path);

srcR.x = srcR.y = 0;
srcR.w = srcR.h = 32 * 2;

dstR.x = dstR.y = 0;
dstR.w = dstR.h = srcR.w;
}

GameObj::~GameObj() {}

void GameObj::render() {
TextureManager::DrawTexture(tex, srcR, dstR);
}

Player.h

#pragma once
#include "Game.h"
#include "GameObj.h"

class Player : public GameObj
{
public:
Player(const char* path, int x, int y);

~Player();

void update() override;

private:
int x{ 0 };
int y{ 0 };
int speed{ 0 };
int velocity{ 0 };
};

Player.cpp

#include "Player.h"

Player::Player(const char* path, int x, int y) : GameObj(path){};

Player::~Player() {};

void Player::update ()
{
x++;

dstR.x = x;
dstR.y = y;
}

最佳答案

正如 Retired Ninja 评论的那样,代码中存在循环包含问题。 GameObj.h 包含 Game.h,Game.h 包含 Player.h。为了解决这个问题,我删除了 GameObj.h 中包含的 Game.h。

GameObj.h

#pragma once
#include <SDL.h>

class GameObj
{
public:
GameObj(const char* path);

virtual ~GameObj() = default;

virtual void update() = 0;

void render();

protected:
SDL_Texture* tex{ nullptr };
SDL_Rect srcR;
SDL_Rect dstR;
};

GameObj.cpp

#include "GameObj.h"
#include "TextureManager.h"

GameObj::GameObj(const char* path)
{
tex = TextureManager::LoadImage(path);

srcR.x = srcR.y = 0;
srcR.w = srcR.h = 32 * 2;

dstR.x = dstR.y = 0;
dstR.w = dstR.h = srcR.w;
}

GameObj::~GameObj() {}

void GameObj::render() {
TextureManager::DrawTexture(tex, srcR, dstR);
}

关于c++ - 如何在C++中正确继承基类并覆盖虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68876455/

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