c++ - 2D Array of objects with virtual child methods -> "vtable referenced from" error -
in header tile class, defined pure virtual method no definition in implementation: virtual void setvals(int id) = 0;
the 2 classes inherit tile (terrain , actor) both overwrite setvals method implementations:
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; } }
and
void tile::setvals(int id){ switch(id){ case 1 : gfx_ = '?'; name_ = "nothing"; desc_ = "you shouldn't seeing this"; break; case 0 : gfx_ = '@'; name_ = "player"; desc_ = "the player"; break; default: gfx_ = '?'; name_ = "error"; desc_ = "error"; tile::ispassable_ = false; break; } }
respectively. 2d array of each of these child classes initialized in map class:
terrain terrain_[height][width]; actor actors_[height][width];
(where height , width constant ints). when program runs, program returns runtime error reading "'vtable actor', referenced from:". making mistake in how i'm initializing these methods or objects?
you said base class tile
, , has following pure virtual method
virtual void setvals(int id) = 0;
but yet went on define it?
void tile::setvals(int id){ switch(id){ case 1 : gfx_ = '?'; name_ = "nothing"; desc_ = "you shouldn't seeing this"; break; case 0 : gfx_ = '@'; name_ = "player"; desc_ = "the player"; break; default: gfx_ = '?'; name_ = "error"; desc_ = "error"; tile::ispassable_ = false; break; } }
you need implement actor::setvals
if derived class tile
Comments
Post a Comment