Classes C++
laetitia
-
sbareau Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
sbareau Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
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
#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;
}
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;
}