gpt4 book ai didi

c++ - 子类中使用的指针不完整 - 错误 : use of undefined type

转载 作者:行者123 更新时间:2023-11-30 05:47:06 25 4
gpt4 key购买 nike

好的...我已经理解了这个关于循环依赖和前向声明的问题,但是我无法理解涉及继承和基于指针的变量的特定错误。

我将展示相关代码的片段:

Player是Entity的派生类

实体.hpp

class Entity : public sf::Sprite{

private:

int health;
float speed;
sf::Time spawntime;
bool invincible;


protected:

SceneGame *myScene; // let's keep it at null
// since setScene will take care of it

public:

// more code....

void setScene(SceneGame *scene){myScene = scene;};
SceneGame* getScene(){return myScene;};

};

player.cpp//假设 player.h 已经完成

myScene 可以被从 Entity 派生的任何类访问

void Player::shootPlayer(float dt){

// we reduce time for shoot delay

shootDelay -= dt;

if (shootDelay < 0.0f) return;

resetDelay();

if (Input::instance()->pressKeybutton(sf::Keyboard::Space)){



// I know I set SceneGame* myScene as protected back in Entity class.
// However, because it is claimed to be undefined,
// despite being forward-declared back in entity,
// I'm getting the 'use of undefined type class' error C2027

sf::Texture bulletTex;
bulletTex = (myScene->game->texmgr.getRef("bulletPlayer"));


Bullet* bullet_p = new Bullet(bulletTex,
1, 10, false, false, 0.0f);

bullet_p->setPosition(this->getGlobalBounds().width,
this->getGlobalBounds().height / 2);

}
}

已回答问题的链接: Forward declaration & circular dependency

最佳答案

您有一个 SceneGame 的前向声明,可能在 entity.hpp 中以 class SceneGame; 的形式。这足以将其用作指针。

player.cpp 中,您实际上使用了该类并且您需要了解它的详细信息(在标题中不需要)。您的 player.cpp 应该包含一个 SceneGame.hpp(或者您的 SceneGame 类实际定义的任何地方)

通过在 player.cpp 文件中包含的末尾添加 #include "SceneGame.hpp" 来修复。

关于c++ - 子类中使用的指针不完整 - 错误 : use of undefined type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685792/

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