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):
questo errore si verifica sul costruttore della classe Gamecodice:/home/michele/Programmazione/Game/GameTypes.h|52|undefined reference to `vtable for Game'|
In realtà sono abbastanza sicuro di sapere che l'errore nasce da questa linea che crea un'istanza della classe derivata:codice:class Game { ... // variabili public: Game(int FPS = 60) { .. // inizializzazioni } virtual void LoadContent(); virtual void Update(); virtual void Draw(); virtual void UnloadContent(); }
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:class TestGame : public Game { ... TestGame(int fps = 60) : Game(fps) { } ... }
ottengo l'errore detto sopra (game è dichiarato come TestGame*).codice:game = new TestGame(60);
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.
porta allo stesso errore di prima -.-codice:Game* gameptr; gameptr = new Game(60);

Rispondi quotando