2015-06-19 74 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