C++ error LNK2019

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
Configuration: Windows Vista
Firefox 2.0.0.11

4 réponses

  1. 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
    1. peut-etre devrais-tu rajouter

      template <class commande>
      au desus de tes procédures
      0
      1. effectivement Mahmah, mauvaise utilisation du &..
        0
        1. Quelle est la solution alors ?
          Merci
          0
      2. 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
        1. 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