c++ : la galère des unresolved external symbol

c++ : la galère des unresolved external symbol - Programmation

Marsh Posté le 28-04-2001 à 19:50:23    

quand je fait un héritage en public, l'appel par la classe dérivée des fonctions de la classe de base donne lieu a des "unresolved external symbol" pour cette fonction.
 
Pourquoi ? j'y comprend plus rien

Reply

Marsh Posté le 28-04-2001 à 19:50:23   

Reply

Marsh Posté le 28-04-2001 à 20:53:43    

Tu as dû utiliser plusieurs fichiers source, il doit manquer des #include "base_class.h"...

Reply

Marsh Posté le 29-04-2001 à 00:41:06    

Ahhhhhhhh
Voila pourquoi mister mat il a des bonnes notes en C++...
Je profite de ton post pour parler du mien : C le post Opengl - Depth Buffer : avec glEnable(GL_DEPTH_TEST) y'a pu rien ki s'affiche...

Reply

Marsh Posté le 29-04-2001 à 14:38:45    

--> gigathlon
je verifirait mais il me semble que j'ai tout inclu
 
--> gooopil
Salut !!! qu'est ce que tu fait là ???
bon, si tu deboggais mon TP j'aurais pas besoin de venir ici !!!
j'ai bien recu ton mail et je m'y met bientot pour GL.

Reply

Marsh Posté le 29-04-2001 à 19:36:17    

j'ai verifié, tout est bien linké alors faut trouver autre chose !!!

Reply

Marsh Posté le 29-04-2001 à 19:45:45    

Tu pourrais donner la partie du code qui génère cette erreur ? Ce serait plus facile pour te dépanner...
Sinon, est-ce que les fonctions en question ne seraient pas déclarées en "private" par hasard ?

Reply

Marsh Posté le 30-04-2001 à 01:45:08    

si t'as visual c++
 
fais "rebuild all"
 
et si ca marche pas, y me semble qu'il y a un "clean" ou qqchose du genre... à moins que je me trompe...

Reply

Marsh Posté le 30-04-2001 à 13:24:36    

je vais essayer le clean et rebuilt all (je suis sous cro$oft visual 6). les fonctions sont en public. si ca foire toujours je vous met un zip contenant le TP.

Reply

Marsh Posté le 30-04-2001 à 14:45:25    

t'as peut etre simplement oublé un point virgule dans ton .h ou tu derive en public, erreur bete mais fréquente ( je le fais tout le temps).


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 30-04-2001 à 20:07:04    

les points virgule semblent bon mais ca marche toujours pas.
j'ai fait clean et rebuilt, idem ca marche pas.
 
si qqun est vraiment motivé il a qu'a me mailer et je lui envoie mon TP (je peut toujours rever ...)
mr_mat@caramail.com

Reply

Marsh Posté le 30-04-2001 à 20:07:04   

Reply

Marsh Posté le 30-04-2001 à 20:46:29    

c'est a la compil ou au linkage ton bleme?

Reply

Marsh Posté le 01-05-2001 à 12:16:42    

Son problème (le mein d'ailleurs), c'est pendant le linkage (je vais me faire engeulé par mr mat si je dit des conneries). Le pire c qu'on l'a fait séparément, nos deux codes sourcs sont semblables mais ça fait la même erreur.  
Sinon, cher mister mat, l'@ du tutorial c antoche.fr.st

Reply

Marsh Posté le 01-05-2001 à 12:43:22    

verifiez les fonctions inline, quand tu as une fonction inline dans ta classe, au linkage elle disparait des fichiers .obj du coup si t'as une lib ou tu veux exporter des fonctions qui sont inline, tu te choppes un mesage de ce genre quand un utilisateur de ton module essaye de linker son appli. Par inline j'entends les methodes decleres comme tel et les operations dont le corps a ete defini directement a l'interieur de ta classe (encore que ce dernier cas, en general ca pose pas du tout de probleme du moment ou tu inclus bien le .h dans les 2 fichiers .cpp)

Reply

Marsh Posté le 02-05-2001 à 15:08:02    

j'ai pas de fonctions inline !!!!!

Reply

Marsh Posté le 02-05-2001 à 16:06:10    

C'est pas complique...
si vous avez des uresolved external, c'est que vous utilisez des fonctions ou des variables qui n'ont pas ete definies. Elles ont ete declaree (.h) mais pas definies. En clair il vous maque des .C ou des .o ou des libs...

Reply

Marsh Posté le 03-05-2001 à 16:21:50    

maintenant ca marche !
 
j'ait mis #include <truc.cpp> au lieu de truc.h et ca marche.
 
je comprend pas pourquoi ca marchait pas, puisque le fichier cpp était inclu dans le projet. m'enfin ...

Reply

Marsh Posté le 04-05-2001 à 23:21:45    

hein ? pourquoi ?

Reply

Marsh Posté le 05-05-2001 à 00:17:29    

quand tu inclus le a.cpp dans b.cpp, le preprocesseur recopie litteralement le code qu'il y a dans a.cpp au debut de b.cpp .
Du coup, les unresolved symbols disparaissent mais cette solution est "sale".  
Si jamais, tu a besoin des memes fonctionalites dans un autre fichier, si tu reutilise un include .cpp, eh bien a la place des unresolved symbol tu va recuperer un already defined error. C'est pour ca qu'il faut mettre juste des definitons de fonctions dans les .h et pas du code.
Ton erreur doit venir du fait que le code dans le fichier .cpp qui te sert d'include n'est pas compile ou ne fait pas partie des dependances du linkeur. En gros, verifie bien que le .cpp en question se trouve dans le projet, dans les sources files.
La seule fois ou tu est oblige de mettre du code dans le .h, c'est dans le cas des templates. Si t'est dans ce cas, tu peux utiliser l'include .cpp sans bleme.

Reply

Marsh Posté le 05-05-2001 à 13:30:47    

voila qui explique tou !
 
en effet, c'est un odèle de classe donc des template.
je savais pas que pour les teplate ca marchait pas comme d'hab, parce que les .cpp étaient bien inclus dans le projet.
 
merci, je comprend enfin !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed