Problème d'unresolved external symbol

cs_Cyrik Messages postés 10 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 13 août 2003 - 11 août 2003 à 14:34
cs_Cyrik Messages postés 10 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 13 août 2003 - 13 août 2003 à 11:08
Salut à tous,

Voila ce que m'affiche le compilateur:
---------------------------------------
Linking...
CY_M2D_ElementBase.obj : error LNK2001: unresolved external symbol "public: __thiscall CY_Objet::CY_Objet(char const *)" (??0CY_Objet@@QAE@PBD@Z)
CY_M2D_ObjetAffichable.obj : error LNK2001: unresolved external symbol "public: __thiscall CY_Objet::CY_Objet(char const *)" (??0CY_Objet@@QAE@PBD@Z)
Test.obj : error LNK2001: unresolved external symbol "public: __thiscall CY_Moteur2D::CY_Moteur2D(void)" (??0CY_Moteur2D@@QAE@XZ)
Test.obj : error LNK2001: unresolved external symbol "public: __thiscall CY_Moteur2D::~CY_Moteur2D(void)" (??1CY_Moteur2D@@QAE@XZ)
CY_M2D_ObjetAffichable.obj : error LNK2001: unresolved external symbol "public: struct CY_M2D_Animation::Partie & __thiscall CY_Tableau<struct CY_M2D_Animation::Partie>::item(int)" (?item@?$CY_Tableau@UPartie@CY_M2D_Animation@@@@QAEAAUPartie@CY_M2D_
Animation@@H@Z)
Debug/CY_Moteur2D.exe : fatal error LNK1120: 4 unresolved externals
-----------------------------

Voila ce que j'ai inclu dans mon projet :

J'ai 4 fichiers .cpp :
CY_M2D_ElementBase.cpp (inclu : CY_M2D_ElementBase.h)
CY_M2D_ObjetAffichable.cpp (inclu : CY_M2D_ObjetAffichable.h)
CY_Moteur2D.cpp (inclu : CY_Moteur2D.h)
Test.cpp (inclu : CY_Moteur2D.h)

J'ai 3 fichier.h :
CY_M2D_ElementBase.h (inclu : CY_M2D_ElementBase.h et CY_Objet.h)
CY_M2D_ObjetAffichable.h (inclu : CY_M2D_ElementBase.h)
CY_Moteur2D.h (inclu : CY_Objet.h, CY_M2D_ElementBase.h et CY_M2D_ObjetAffichable.h)

Je précise que les CY_Objet et Test.cpp ne sont pas dans les mm répertoires que les autres.

J'ai bien implémenté les fonctions que le compilateur nomme dans leur .cpp correspondant avec une définition dans le .h correspondant :
CY_Objet défini dans CY_Objet.h et implémenté dans CY_Objet.cpp
CY_M2D_Animation défini dans CY_M2D_ObjetAffichable.h et implémenté dans CY_M2D_ObjetAffichable.cpp
CY_Moteur2D défini dans CY_Moteur2D.h et implémenté dans CY_Moteur2D.cpp

Quelqu'un a une explication ?

Cyril Q.
Programmeur débutant
Cyrik@wanadoo.fr

7 réponses

guiguikun Messages postés 92 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 octobre 2003 1
11 août 2003 à 14:42
Peut-être qu'il te manque une lib.
0
cs_Cyrik Messages postés 10 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 13 août 2003
11 août 2003 à 14:43
Malheureusement, je ne pense pas que ce soit cela. J'explique rapidement pourquoi. J'avais au paravant fait tourner mon application (qui aurait pu avoir des pbs de lib, vu que j'utilise directx) qui marchait bien. Puis je l'ai ensuite divisée en plusieurs .h et .cpp pour que cela soit plus clair. Et depuis ca ne marche plus.

A moins qu'il faille changer les .lib pour chaque fichier .cpp et .h, mais tout de mm j'espère pas...

J'ajouterais de plus que les fonctions qui posent pb sont des fonctions que j'ai moi mm définie, et je n'ai jamais fait de .lib.

Cyril Q.
Programmeur débutant
Cyrik@wanadoo.fr
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 août 2003 à 14:44
j'espere que tu n'a pas oublié d'ajouter le fichier "CY_Objet.cpp" a ton projet, sinon ca ne risque pas de marcher...
0
cs_Cyrik Messages postés 10 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 13 août 2003
11 août 2003 à 14:52
Malheureusement, que je l'ajoute ou non, l'erreur concernant CY_Objet ne change pas ...

Cyril Q.
Programmeur débutant
Cyrik@wanadoo.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
11 août 2003 à 14:59
Je crois que veccio56 a raison. Mets bien tout tes cpp et ts tes .h dans ton projet.

Cordialement.

ADPro22
0
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
13 août 2003 à 03:40
Voici pourquoi tout le monde te dit la même chose :
pour faire simple, un exemple.
soient 3 fichiers

fonction.ccp // definition, code de la fonction "ma_fonction()"
fonction.hpp // déclaration de ma_fonction()

main.cpp // programme utilisant ma_fonction()

'à la main'
si tu compiles main.cpp et fonction.cpp en déclarant le fonction.hpp, tu obtiens main.obj et fonction.obj
il faut ensuite linker, c'est à dire faire l'édition des liens entre les différentes parties et avec les librairies (statiques .lib ou dynamiques .dll)

si tu ne linkes que fonction.obj, il [le linker] te renverra une erreur du type : pas d'entrée main() dans fonction.obj
Au contraire, si tu ne linkes, que main.obj, il renverra une erreur du type unuresolved external symbol ma_fonction??? (ou ??? sont des chiffres)

Donc, dans ton projet, il est important de mettre tous les .cpp dedans ensembles pour que ton linker n'oublie pas de .obj a l'edition des liens.

Cordialement,

ADPro22
0
cs_Cyrik Messages postés 10 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 13 août 2003
13 août 2003 à 11:08
Hum, j'ai réussi à le compiler tout à l'heure mais avec une façon affreuse. J'ai commencer par sélectionner tous les .cpp et je les ai mis en "exclude file from build" (click droit dessus, Settings... , onglet Général) sauf mon .cpp principal. Ensuite, dans ce dernier, j'ai fait des includes de tous ces .cpp et ca compile.

Mon pb est peut etre résolu par le message en dessous, mais je ne sais pas comment lui dire quoi linker.

Cyril Q.
Programmeur débutant
Cyrik@wanadoo.fr
0
Rejoignez-nous