C++ Undefined Reference to vtable et de l'héritage
Fichier A. h
#ifndef A_H_
#define A_H_
class A {
public:
virtual ~A();
virtual void doWork();
};
#endif
Enfants De Fichier.h
#ifndef CHILD_H_
#define CHILD_H_
#include "A.h"
class Child: public A {
private:
int x,y;
public:
Child();
~Child();
void doWork();
};
#endif
Et Child.cpp
#include "Child.h"
Child::Child(){
x = 5;
}
Child::~Child(){...}
void Child::doWork(){...};
Le compilateur dit qu'il y a un undefined reference to vtable pour A
.
J'ai essayé beaucoup de choses différentes et pourtant aucun n'a travaillé.
Mon objectif est de classe A
à une Interface, et pour séparer la mise en œuvre du code à partir des en-têtes.
- Vous devez définir tous les non-fonction virtuelle pure que vous déclarez. Vous n'avez pas besoin de définir une fonction non virtuelle que vous déclarez, mais ne l'utilisez pas.
Vous devez vous connecter pour publier un commentaire.
Pourquoi l'erreur & comment le résoudre?
Vous devez fournir définitions pour toutes les fonctions virtuelles dans
class A
. Seulement des fonctions virtuelles pures sont autorisés à avoir pas d'autre définition.je.e: Dans
class A
deux méthodes:devraient être définis(doit avoir un corps)
par exemple:
A.cpp
Mise en garde:
Si vous voulez que votre
class A
d'agir comme une interface(un.k.un Classe abstraite en C++), alors vous devez faire de la méthode virtuelle pure.Bonne Lecture:
Ce qui signifie que la table virtuelle" est un externe non résolu?
Lors de la construction de C++, l'éditeur de liens dit à ma constructeurs, destructeurs ou des tables virtuelles ne sont pas définis.
Dans ce cas, le membre de la fonction virtuelle pure dans la classe A.
A
destructeur doit être virtuel qui appliqueChild
destructeur appelé en premier, suivi parA
destructeur. Si leA
destructeur de classe n'est pas du virtuel alors le comportement est indéfini.Assurez-vous de supprimer tout "*.gch" fichiers si aucune des autres réponses vous aider.