Problème d'héritage d'héritage + redéfinition de méthode [Résolu] - C++ - Programmation
Marsh Posté le 20-02-2006 à 13:18:14
Code :
|
Parce que les parentheses signifient ici l'appel explicite au contructeur TestC(void) qui n'existe pas ainsi que TestB(void) et TestA(void)
Enleve les parentheses ou ajoutes les 3 constructeurs.
Marsh Posté le 20-02-2006 à 13:36:17
C'est vrai, j'avais oublié cette règle ...
On y est pas encore, mais ça va un peu mieux ...
Test.o: In function `main':Test.cpp:(.text+0x25): référence indéfinie vers « operator new(unsigned int)» |
Marsh Posté le 20-02-2006 à 13:40:01
[quotemsg=1309563,1,37596]
Code :
|
quotemsg]
; apres l'override de virtual void A() dans TestB
Marsh Posté le 20-02-2006 à 14:02:21
Pas mieux ...
Le code actuellement :
Code :
|
Le résultat :
Test.o: In function `main':Test.cpp:(.text+0x25): référence indéfinie vers « operator new(unsigned int)» |
Marsh Posté le 20-02-2006 à 14:37:55
olivier@olivier:/tmp$ g++ -v |
et pour compiler :
gcc -c Test.cpp && gcc -o Test Test.o |
Marsh Posté le 20-02-2006 à 14:39:30
J'ai rien dit ... Je suis vraiment trop con ... j'étais persuadé d'utiliser g++ et je viens juste de remarquer que j'utilisais gcc ... (effectivement avec g++ ça compile ...)
Merci les gars pour l'aide et désolé pour le dérangement ...
Marsh Posté le 20-02-2006 à 20:49:02
FrozenPaladin a écrit :
|
Pas du tout. La présence d'un new-initilizer "()" produit un effet visible lorsque le type auquel le new-initilizer se rapporte est un POD.
Marsh Posté le 21-02-2006 à 20:45:42
le code que tu nous montre n'est pas celui compilé. d'ou sors ce delete ?
Marsh Posté le 21-02-2006 à 20:54:57
Olivier51 a écrit : J'ai rien dit ... Je suis vraiment trop con ... j'étais persuadé d'utiliser g++ et je viens juste de remarquer que j'utilisais gcc |
pourtant tu montres des erreurs à l'édition des liens alors qu'avec gcc ca ne compilerait meme pas, ca bloquerait sur des 'parse error' ??
Marsh Posté le 20-02-2006 à 12:46:56
Voilà mon code source :
Et le résultat de la compilation (enfin du linkage) :
Test.o: In function `main':Test.cpp:(.text+0x25): référence indéfinie vers « operator new(unsigned int)»
Test.o:(.gnu.linkonce.r._ZTI5TestC[typeinfo for TestC]+0x0): référence indéfinie vers « vtable for __cxxabiv1::__si_class_type_info»
Test.o:(.gnu.linkonce.r._ZTI5TestB[typeinfo for TestB]+0x0): référence indéfinie vers « vtable for __cxxabiv1::__si_class_type_info»
Test.o:(.gnu.linkonce.r._ZTI5TestA[typeinfo for TestA]+0x0): référence indéfinie vers « vtable for __cxxabiv1::__class_type_info»
Test.o:(.gnu.linkonce.r._ZTV5TestA[vtable for TestA]+0x8): référence indéfinie vers « __cxa_pure_virtual »
Test.o:(.eh_frame+0x11): référence indéfinie vers « __gxx_personality_v0 »
collect2: ld returned 1 exit status
Je ne vois pas trop l'erreur ...
Message édité par Olivier51 le 20-02-2006 à 14:39:55