Classes C++
laetitia
-
sbareau Messages postés 13 Statut Membre -
sbareau Messages postés 13 Statut Membre -
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);
}
}
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 -
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;
}