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

  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
    0
    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;
      }
      0