C++ error LNK2019

Fermé
Hyp - 19 janv. 2008 à 21:13
 debutantcpp - 11 mai 2009 à 17:41
Bonjour à tous,
Je rencontre un problème lors de la compilation d'un programme :

Édition des liens en cours...
1>TD4Gb.obj : error LNK2019: symbole externe non résolu "void __cdecl Appeler(class std::list<struct commande,class std::allocator<struct commande> >,int)" (?Appeler@@YAXV?$list@Ucommande@@V?$allocator@Ucommande@@@std@@@std@@H@Z) référencé dans la fonction _main
1>TD4Gb.obj : error LNK2019: symbole externe non résolu "void __cdecl Ajouter(class std::list<struct commande,class std::allocator<struct commande> >,int)" (?Ajouter@@YAXV?$list@Ucommande@@V?$allocator@Ucommande@@@std@@@std@@H@Z) référencé dans la fonction _main
1><Emplacement de VisualStudio>\Projects\TD4Gb\Debug\TD4Gb.exe : fatal error LNK1120: 2 externes non résolus


voici des bouts de codes :

#include <string>
#include <iostream>
#include <list>

using namespace std;
struct commande
{
string Nom;
int HeureAppel;
int Heure_Reveil ;
};
typedef list<commande> LReveil ;
typedef list<commande>::iterator Iter;

void Ajouter(list<commande> , int ) ;
void Appeler(list<commande> , int ) ;

int main()
{
int minute ;
list<commande> liste;
for(minute=0; minute< 48*60; minute++)
{
Ajouter(liste, minute) ;

Appeler(liste, minute) ;
}


}


void Ajouter(list<commande> &liste, int minute)

{
//etc....

}

void Appeler(list<commande> &liste, int minute)
{

while (liste.front().Heure_Reveil<=minute)
{
cout<<"Il est "<< minute/60<<":"<<minute%60<<", appeler "<<liste.front().Nom<<endl ;
liste.pop_front() ;
}

return ;

}

J'ai lu que c'est un problème de linker, mais la résolution dépasse ce que je sais en programmation.
Merci d'avance pour vos réponses

4 réponses

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
20 janv. 2008 à 10:22
Bonjour,

Non non, pas de soucis de template ici (on n'en définit pas, juste une utilisation classique)

Par contre, tu fais une déclaration courte du style

void appeler ( Type1 var1, type2 var2 );

et tu définis:

void appeler ( Type1 &var1, type2 var2 ); avec une référence sur Type1

d'où prototypes différents, il ne trouve pas la fonction déclarée et n'utilise pas la fonction définie.

Voilou.

M.
2
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
20 janv. 2008 à 09:50
peut-etre devrais-tu rajouter

template <class commande>
au desus de tes procédures
0
effectivement Mahmah, mauvaise utilisation du &..
0
debutantcpp
11 mai 2009 à 14:24
Quelle est la solution alors ?
Merci
0
mariemarie14
11 mai 2009 à 15:22
Salut,
j'ai eu la même erreur, et je l'ai réglée en mettant cette ligne en haut de mon main :

#pragma comment(linker, "/SUBSYSTEM:CONSOLE")

Je ne sais pas si c'est juste mais ça a l'air de fonctionner à priori.

Marie
0
debutantcpp
11 mai 2009 à 17:41
Merci de ta réponse mais ca ne fonctionne pas j'ai toujours cette erreur

md5_dgst.obj : error LNK2019: symbole externe non résolu _md5_block_asm_host_order référencé dans la fonction _MD5_Update

Qui vient de cette fonction MD5_Update(&Context, String, strlen(String));

Declaré ici void MD5_Update(MD5_CTX *c, const void *data, unsigned long len);

Et voici la definition de la structure

typedef struct MD5state_st
{
MD5_LONG A,B,C,D;
MD5_LONG Nl,Nh;
MD5_LONG data[MD5_LBLOCK];
int num;
} MD5_CTX;


Si quelqu'un a une idée merci de m'en faire part
0