Je construis un design de jeu simple pour un de mes projets. J'ai les classes suivantes:
class Character
{
public:
virtual void Display();
virtual void SetParameters( char* param, ... );
};
class NonPlayableCharacter : public Character
{
public:
virtual void Display();
virtual void SetParameters( char* paaram, ... );
int GetNPCState();
}
Et puis j'ai plein de classes qui dérivent soit de Character soit de NonPlayableCharacter. Je les définis comme ceci:
std::vector _allChar;
Mon problème est qu'à tout moment donné, je voudrais effectuer une opération sur un des éléments du vecteur. Donc, en récupérant un élément du vecteur, je ne peux pas appeler directement la méthode GetNPCState()
car les éléments dans le vecteur sont de type Character*. Donc en faisant ceci:
_allChar[0]->GetNPCState();
ne fonctionne pas. J'ai donc essayé de le faire avec la célèbre dynamic_cast:
NonPlayableCharacter* test = dynamic_cast(_allChar[0]);
test->GetNPCState();
Le problème avec cette dernière tentative est que GetNPCState()
plante car l'objet est nul, et je sais de manière certaine (via le débogage) que _allChar[0] n'est pas nul.