Ciao a tutti...
Stavo provando a realizzare un piccolo plagio di M$ su linux e mi sono imbattuto in questo errore (stavo cercando di implementare una classe Game come quella di XNA... fosse anche solo per vedere se avevo capito come funziona):
codice:
/home/michele/Programmazione/Game/GameTypes.h|52|undefined reference to `vtable for Game'|
questo errore si verifica sul costruttore della classe Game
codice:
class Game
{
... // variabili
public:
Game(int FPS = 60)
{
.. // inizializzazioni
}
virtual void LoadContent();
virtual void Update();
virtual void Draw();
virtual void UnloadContent();
}
In realtà sono abbastanza sicuro di sapere che l'errore nasce da questa linea che crea un'istanza della classe derivata:
codice:
class TestGame : public Game
{
...
TestGame(int fps = 60) : Game(fps) { }
...
}
che sarebbe un tentativo di chiamare il costruttore della base class senza fare altro. Riesco senza problemi a istanziare la classe Game direttamente, ma istanziando la classe TestGame così:
codice:
game = new TestGame(60);
ottengo l'errore detto sopra (game è dichiarato come TestGame*).
Ho cercato su google (senza capirci molto, peraltro) cosa sia la vtable... e da quello che ho capito serve per i metodi virtuali. Ma il costruttore non è virtuale... quindi, perchè mi dice che non c'è la vtable di Game? :master:
Update:
Dopo aver smanacciato un po' sul codice tentando di risolverlo, ora non è più possibile istanziare Game direttamente.
codice:
Game* gameptr;
gameptr = new Game(60);
porta allo stesso errore di prima -.-