2015-06-19 75 views
0

“虚函数表从参考点”以我为瓷砖类的头,我与在执行没有定义所定义的纯虚方法瓦(地形和演员)都与实施方式覆盖setVals方法:分别2D阵列>错误

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; 
    } 
} 

。每个子类的一个2D阵列被初始化在地图类:

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

(其中高度和宽度是恒定的整数)。但是当程序运行时,程序返回一个运行时错误,读取“'Actor'的vtable,引用自:”。我在如何初始化这些方法或对象时犯了错误吗?

回答

1

你说你的基类是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

+0

派生类中我很抱歉。我的问题是,我已经在Actor实现文件中写了void Tile :: setVals(int ID){...而不是void Actor :: setVals(int ID){...)。非常感谢你,我为我的愚蠢道歉。 – Paradoxian

+2

@ user1207515不用担心,我们都会犯错,特别是在星期五:) – CoryKramer