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

标签 c++ arrays xcode runtime-error virtual

在 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/

相关文章:

ios - Xcode 游戏崩溃并指向 SpriteNode 说 "EXC_BAD_ACCESS(code=1, address=0xa001800"

c++ - 我如何检查重构时我没有破坏任何东西?

c++ - 运行时可用信号列表

arrays - Julia:将分类数组转换为数值数组的最佳方法是什么?

java - Kotlin/Java 是否使用缓存系统来提高迭代数组时的性能?

ios - swift 中的“架构 i386 的 undefined symbol ”

c++ - vector 作为 pthread_create 的输入

c++ - 在 C++ 中为 iOS 开发(有/没有 Xcode)

在 C 中创建迭代数组并格式化电话号码的方法

ios - swift/xcode/iOS : Using Firebase to retrieve data already collected and displaying it in a separate view controller