Classes C++

Fermé
laetitia - 12 oct. 2001 à 20:04
sbareau Messages postés 13 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 10 juin 2002 - 8 nov. 2001 à 13:19
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

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
sbareau Messages postés 13 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 10 juin 2002
8 nov. 2001 à 13:19
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