链表中的双指针出现问题



我正在尝试制作一个包含游戏中所有怪物的数据结构。由于某种原因,当我分配新怪物时,我在初始化中得到"无法将怪物**转换为p_monster{Aka怪物*}"。如果你能帮助我,将不胜感激。提前致谢

struct Monster {
int x;
int y;
int health;
Monster *next;
};
typedef Monster* p_monster;
class gameUtils {
protected:
p_monster monster};
public:
gameUtils(){
monster=NULL;
...}
function(){
monster = getMonster(monster)}  // so that I can assign whatever value I want to monster->last->next through the function itself
p_monster getMonster(p_monster monster){
p_monster newMonster = new p_monster;
if(monster==NULL){
monster=newMonster;
}else{
....   // find last monster then create new one and pass it to caller
return monster;   // returns new monster without any value
} 

类型别名在using中稍微清晰一些。

//typedef Monster* p_monster;
using p_monster = Monster*;

p_monsterMonster*.现在,当您调用new T时,将创建一个类型为T的对象,结果您将获得指向该对象的指针,即T*.

当你写:

p_monster newMonster = new p_monster;

然后new动态分配一个p_monster,一个Monster*,你会得到一个p_monster*,一个Monster**。没有从Monster**Monster*的转换,因此错误。

我建议std::vector<Monster>来存放你的怪物。你的列表方法是侵入性的,你设计中的Monster知道自己在链表中,它有一个next成员。使用std::vector<Monster>时,您可以将Monster存储在载体中、载体外部或其他容器中,Monster无需注意。 此外,不通过原始指针使用手动内存管理将使代码更简单。

struct Monster {
int x;
int y;
int health;
Monster(int x,int y,int health) : x(x),y(y),health(health) {}
};
struct gameUtils {
std::vector<Monster> monster;
Monster& createMonster(int x,int y,int health) {
monster.emplace_back(x,y,health);
return monster.back();
}
};

C++中的链表是std::list的,尽管向量从其元素存储在连续内存中获利很多。它从中受益匪浅,以至于它通常优于std::list,即使某些方法的时间复杂度表明并非如此。

相关内容

  • 没有找到相关文章

最新更新