Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
922 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Undefined reference to `vatable for RenduTroisD`

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Undefined reference to `vatable for RenduTroisD`

n°2089246
LaSoeur
Posté le 13-07-2011 à 13:36:03  profilanswer
 

Bonjour à tous et toutes,
 
Voila j'ai un problème en C++, je viens de commencer avec ce langage et ça fait 2 jours que je n'arrive plus a avancer. voila la structure de mon "projet" (en très simplifié) :
 
TroisDWidget.h - La classe mère

Code :
  1. class TroisDWidget : public QGLWidget
  2. {
  3.     Q_OBJECT
  4. public:
  5.     explicit TroisDWidget(int framesPerSecond = 0, QWidget *parent = 0, char *name = 0);
  6.     ~TroisDWidget();
  7.     virtual void initializeGL() = 0;
  8.     virtual void resizeGL(int width, int height) = 0;
  9.     virtual void paintGL() = 0;
  10.     virtual void keyPressEvent( QKeyEvent *keyEvent );
  11. public slots:
  12.     virtual void timeOutSlot();
  13. private:
  14.     QTimer *t_Timer;
  15. };


 
TroisDWidget.cpp - Implémentation

Code :
  1. TroisDWidget::TroisDWidget(int framesPerSecond, QWidget *parent, char *name) : QGLWidget(parent){
  2.   ....
  3. }
  4. void TroisDWidget::timeOutSlot()
  5. {
  6. }
  7. void TroisDWidget::keyPressEvent(QKeyEvent* event) {
  8.     ....
  9. }
  10. TroisDWidget::~TroisDWidget(){}


 
RenduTroisD.h - Classe fille

Code :
  1. class RenduTroisD : public TroisDWidget
  2. {
  3.     Q_OBJECT
  4. public:
  5.     explicit RenduTroisD(QWidget *parent = 0);
  6.     void initializeGL();
  7.     void resizeGL(int width, int height);
  8.     void paintGL();
  9. };


 
RenduTroisD.cpp - Implémentation

Code :
  1. RenduTroisD::RenduTroisD(QWidget *parent) : TroisDWidget(60, parent, "Rendu 3D" )
  2. {
  3.     // rien pour le moment
  4.     // l'erreur nous renvoie à ce constructeur
  5. }
  6. void RenduTroisD::initializeGL(){....}
  7. void RenduTroisD::resizeGL(int width, int height){...}
  8. void RenduTroisD::paintGL(){...}


 
Comme le dit le titre, l'erreur que je récupère est : "Undefined reference to `vatable for RenduTroisD`". Qui me redirige vers la ligne du constructeur : RenduTroisD::RenduTroisD(QWidget *parent) : TroisDWidget(60, parent, "Rendu 3D" ){}
 
 
J'ai pu lire et apprendre que cela voulait dire qu'il y a un problème de link au niveau de la table qui s'occupe des fonctions virtuelles. De plus, la plupart des gens sur internet qui ont eu se problème parlent de constructeurs ou destructeurs non valides. J'ai beau ajouter des constructeurs ou destructeurs partout, cela ne change pas grand chose à mon problème.
 
Quelqu'un pourrait m'aider ? Je ne sais vraiment plus quoi faire.
 
 
Merci infiniment.
Votre Soeur

mood
Publicité
Posté le 13-07-2011 à 13:36:03  profilanswer
 

n°2089255
shaoyin
Posté le 13-07-2011 à 14:06:44  profilanswer
 

Personnellement, je n'ai jamais rencontré ce type d'erreur, c'est peut-être spécifique à Qt ? Tu as essayé de relancer une passe de "qmake" ?
 
Ton destructeur dans la classe TroisDWidget devrait être déclaré "virtual", puisque tu dérives cette classe.
 
Hormis ces deux remarques, je ne vois pas ce qui cloche...

n°2089258
shaoyin
Posté le 13-07-2011 à 14:14:54  profilanswer
 

Et puis au passage, rajoute un destructeur dans ta classe RenduTroisD, même s'il ne fait rien de spécial.

n°2089298
Joel F
Real men use unique_ptr
Posté le 13-07-2011 à 16:04:41  profilanswer
 

il faut au moins un destructeur virtual dans ton bousin

n°2089308
LaSoeur
Posté le 13-07-2011 à 17:11:07  profilanswer
 

Bonjour et merci de m'avoir répondu.
 
J'ai ajouté à la classe mère (TroisDWidget.h) :

Code :
  1. virtual ~TroisDWidget();


et à TroisDWidget.cpp :

Code :
  1. virtual ~TroisDWidget();


 
Cela ne change en rien mon problème malheureusement. Concernant également la réponse sur qmake, j'ai bien validé, exécuté, relancé le qmake, cela ne change rien non plus....
 
J'ai redémarré mon ordinateur a cause des mise à jour Windows... et paff ça marche....
 
En tout cas ça semble marcher...
 
Avez vous une idée de pourquoi ça marché pas?
 

n°2089309
LaSoeur
Posté le 13-07-2011 à 17:11:07  profilanswer
 

Bonjour et merci de m'avoir répondu.
 
J'ai ajouté à la classe mère (TroisDWidget.h) :

Code :
  1. virtual ~TroisDWidget();


et à TroisDWidget.cpp :

Code :
  1. virtual ~TroisDWidget();


 
Cela ne change en rien mon problème malheureusement. Concernant également la réponse sur qmake, j'ai bien validé, exécuté, relancé le qmake, cela ne change rien non plus....
 
J'ai redémarré mon ordinateur a cause des mise à jour Windows... et paff ça marche....
 
En tout cas ça semble marcher...
 
Avez vous une idée de pourquoi ça marché pas?
 

n°2089360
cracoucoin
cracouCOIIIIIIIIIIIIIIIIINN!!!
Posté le 13-07-2011 à 22:39:46  profilanswer
 

LaSoeur a écrit :

Bonjour et merci de m'avoir répondu.
 
J'ai ajouté à la classe mère (TroisDWidget.h) :

Code :
  1. virtual ~TroisDWidget();


et à TroisDWidget.cpp :

Code :
  1. virtual ~TroisDWidget();


 
Cela ne change en rien mon problème malheureusement. Concernant également la réponse sur qmake, j'ai bien validé, exécuté, relancé le qmake, cela ne change rien non plus....
 
J'ai redémarré mon ordinateur a cause des mise à jour Windows... et paff ça marche....
 
En tout cas ça semble marcher...
 
Avez vous une idée de pourquoi ça marché pas?
 


 
Le problème n'est pas réglé. Ton programme doit écrire à un endroit qui ne contient rien d'important, donc il ne plante pas. Si tu reboote, il pourra très bien replanter.
Mais je suis toujours d'avis d'attendre l'avis du mètre Jole F
 
cracoucoin
 

n°2089672
shaoyin
Posté le 16-07-2011 à 11:45:43  profilanswer
 

LaSoeur a écrit :


Avez vous une idée de pourquoi ça marché pas?


 
Les voies de l'informatique sont impénétrables, MaSoeur...
 

cracoucoin a écrit :


Le problème n'est pas réglé. Ton programme doit écrire à un endroit qui ne contient rien d'important, donc il ne plante pas. Si tu reboote, il pourra très bien replanter.
Mais je suis toujours d'avis d'attendre l'avis du mètre Jole F
 
cracoucoin


 
Jusqu'ici, le programme ne passait pas la phase d'édition des liens... Ce n'est donc pas un problème d'exécution !

n°2089712
breizhbugs
Posté le 16-07-2011 à 18:10:38  profilanswer
 

Bonjour,
Ce genre de problème dépasse de loin mes compétences mais j'ai trouvé ce lien qui semble intéressant: http://www.daniweb.com/software-de [...] ads/114299


---------------
Seul Google le sait...
n°2089718
Joel F
Real men use unique_ptr
Posté le 16-07-2011 à 18:42:12  profilanswer
 

virtual ~TroisDWidget() {}  
 
deja me parait mieux ... si tu ne fait que declarais et pas definir :/


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Undefined reference to `vatable for RenduTroisD`

 

Sujets relatifs
Undefined offset : 2 ?Call to undefined function GetSQLValueString() in ... line 10
undefined reference toNotice: Undefined Index:
undefined reference to `sock_errno'Référence en 64 bits
TreeView - La référence d'objet n'est pas définie...reference à un autre classeur dans une formule
Plus de sujets relatifs à : Undefined reference to `vatable for RenduTroisD`


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR