具有虚拟 child 方法的 objects 二维数组 -> "vtable referenced from" 错误
2D Array of objects with virtual child methods -> "vtable referenced from" error
在我的 header 中,我为 Tile class 定义了一个纯虚方法,在实现中没有定义:virtual void setVals(int ID) = 0;
继承 Tile 的两个 classes(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;
}
}
分别。这些 child classes 中的每一个的二维数组在 Map class:
中初始化
Terrain terrain_[HEIGHT][WIDTH];
Actor actors_[HEIGHT][WIDTH];
(其中 HEIGHT 和 WIDTH 是常量整数)。但是当程序运行时,程序returns 出现运行时错误读取“'vtable for Actor',引用自:”。我是不是在初始化这些方法或 objects 时犯了错误?
你说你的基础class是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::setVals
是 Tile
的派生 class,则需要实施 Actor::setVals
在我的 header 中,我为 Tile class 定义了一个纯虚方法,在实现中没有定义:virtual void setVals(int ID) = 0;
继承 Tile 的两个 classes(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;
}
}
分别。这些 child classes 中的每一个的二维数组在 Map class:
中初始化Terrain terrain_[HEIGHT][WIDTH];
Actor actors_[HEIGHT][WIDTH];
(其中 HEIGHT 和 WIDTH 是常量整数)。但是当程序运行时,程序returns 出现运行时错误读取“'vtable for Actor',引用自:”。我是不是在初始化这些方法或 objects 时犯了错误?
你说你的基础class是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::setVals
是 Tile
Actor::setVals