gpt4 book ai didi

c++ - 具有虚拟子方法的二维对象数组 -> "vtable referenced from"错误

转载 作者:行者123 更新时间:2023-11-28 06:12:40 26 4
gpt4 key购买 nike

在 Tile 类的 header 中,我定义了一个在实现中没有定义的纯虚方法:virtual void setVals(int ID) = 0;

继承 Tile 的两个类(Terrain 和 Actor)都用实现覆盖了 setVals 方法:

void Terrain::setVals(int ID){
switch(ID){
case 1 : GFX_ = '.'; name_ = "Grass"; desc_ = "Some grass"; break;
default: GFX_ = '?'; name_ = "Error"; desc_ = "Error"; Tile::isPassable_ = false; break;
}
}

void Tile::setVals(int ID){
switch(ID){
case 1 : GFX_ = '?'; name_ = "Nothing"; desc_ = "You shouldn't be seeing this"; break;
case 0 : GFX_ = '@'; name_ = "Player"; desc_ = "The Player"; break;
default: GFX_ = '?'; name_ = "Error"; desc_ = "Error"; Tile::isPassable_ = false; break;
}
}

分别。这些子类中的每一个的二维数组都在 Map 类中初始化:

Terrain terrain_[HEIGHT][WIDTH];
Actor actors_[HEIGHT][WIDTH];

(其中 HEIGHT 和 WIDTH 是常量整数)。但是当程序运行时,程序返回一个运行时错误,读取“'vtable for Actor',引用自:”。我在初始化这些方法或对象时是否犯了错误?

最佳答案

你说你的基类是Tile,有如下纯虚方法

virtual void setVals(int ID) = 0;

但是您还继续定义它吗?

void Tile::setVals(int ID){
switch(ID){
case 1 : GFX_ = '?'; name_ = "Nothing"; desc_ = "You shouldn't be seeing this"; break;
case 0 : GFX_ = '@'; name_ = "Player"; desc_ = "The Player"; break;
default: GFX_ = '?'; name_ = "Error"; desc_ = "Error"; Tile::isPassable_ = false; break;
}
}

如果 Actor::setValsTile 的派生类,则需要实现它

关于c++ - 具有虚拟子方法的二维对象数组 -> "vtable referenced from"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944946/

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