Classes C++

Salut,

Je débute en C++, et j'ai un pb avec la fonction membre ajoute du programme suivant, voici l'erreur indiquée :

Compiling...
dictionnaire.cpp
Linking...
dictionnaire.obj : error LNK2001: unresolved external symbol "class cDictionnaire __cdecl ajoute(char * const)" (?ajoute@@YA?AVcDictionnaire@@QAD@Z)
Debug/dictionnaire.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

dictionnaire.exe - 2 error(s), 0 warning(s)

#include <iostream.h>
#include <string.h>

const long lMax=50;
const long nMaxEntrees = 1000;
int m=0;
char commande[100];//ligne saisie par l'utilisateur

class cBiMot { public :

char source[lMax];
char cible[lMax];

cBiMot(void);

cDictionnaire(void);

cBiMot(char s[50], char c[50]);

};

cBiMot::cBiMot(void) {}
cBiMot::cBiMot(char s[], char c[]) {

strcpy(source, s);
strcpy(cible, c);
strcmp(source, s);
strcmp(cible, c);
strcat(source, cible);

}

class cDictionnaire { public :

cBiMot t[nMaxEntrees];
long nbEntrees;
cDictionnaire(void);
cDictionnaire(cDictionnaire &n);
int ajoute(char co[]);

};

cDictionnaire::cDictionnaire(void) : nbEntrees(0) {}
cDictionnaire::cDictionnaire(cDictionnaire &n): nbEntrees(n.nbEntrees) {}
int cDictionnaire::ajoute(char co[]) {

char t1[50], t2[50];

int i=2; // on suppose que les deux premiers caracteres sont la commande (a, q, l) suivie
// d'un blanc
int j=0;

// suppression des blancs nécessaires si il y en a plus d'un entre le caractere de commande
// et la chaine t1

// stockage des caracteres alphabétiques dans les chaines t1 et t2

while (true) {

while (true) {

if (commande[i]==';') break;
if (commande[i]==' ') break; //on ignore les blancs
t1[j]=commande[i];
i+=1;

}

if (commande[i]==';') break;

i+=1;

}

j=0;
i+=1;

while (true) {

while (true) {

if (commande[i]=='\0') break;
if (commande[i]==' ') break;
t2[j]=commande[i];
i+=1;

}

if (commande[i]=='\0') break;

i+=1;

}

//inutile de comparer t2 avec l'entree cible, puisqu'on les saisit par paire

if (strcmp(t[m].source, t1)!=0) {

m=m+1;

strcpy(t[m].source, t1);
strcpy(t[m].cible, t2);

}

cout << t[m].source << endl;
cout << t[m].cible << endl;

cDictionnaire m;
cDictionnaire n(m);
cout << n.nbEntrees << endl;

return (0);
}

void main(void) {

cDictionnaire ajoute(char co[]);

char c;
int l=0;

while (true) {

cout << " ? ";

while (true) {

c=cin.get();
if (c=='\n') break;
commande[l]=c;
l=l+1;

}

commande[l]='\0';

if (commande[0]=='q') break;
if (commande[0]=='a') ajoute(commande);

}

}

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. avant ton main, il faut inclure ta classe dictionnaire,
    #include "cDictionnaire.h"

    j'ai pas pris la peine de bien regarder ton code mais c'est une erreur d'inclusion.

    domi
    1. salut,

      je pense que c'est un probleme de declaration au debut du main :

      cDictionnaire ajoute(char co[]);

      cDictionnaire est une classe
      ajoute() est une fonction membre de cette classe

      donc pour utiliser ajoute :
      char col[];
      cDictionnaire dico;
      dico.ajoute(col)

      dans ton programme le compilo croit que ajoute est une instance de la classe Cdictionnaire et que tu veux initialiser cet objet avec le
      parametre col.

      stephane

      PS : exemple de main en C++

      int main(int argc,char *argv[])
      {
      char c='';
      cDictionnaire dico;
      string commande="";

      while (true) {

      cout << " ? ";

      while (true) {

      cin>>c:
      if (c=='\n') break;
      commande+c;
      }

      commande+='\0';

      if (commande[0]=='q') break;
      //c_str() sur un string renvoie le char* associe
      if (commande[0]=='a') dico.ajoute(commande.c_str());

      }

      return 0;
      }