Darksnakes
Messages postés19Date d'inscriptionsamedi 21 octobre 2006StatutMembreDernière intervention14 mars 2007
-
13 mars 2007 à 15:18
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 2010
-
14 mars 2007 à 21:41
Bonjour tout le monde,
Voilà, je débute en c++. J'ai un tp à faire concernant les classes mai j'ai un probleme lors de la compilation.
j'ai trois fichiers Pile.h,Pile.cc, test.cc Pile.h et Pile.cc comprenant les déclarations de ma classe et des methodes, et test.cc pour tester la class.
J'ai bien inclu le Pile.h dans le Pile.cc et le test.cc mais quand je compile test.cc il me dit [Linker error] undefined reference to pour toutes les methodes de ma classe.
Merci d'avance pour l'aide
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 13 mars 2007 à 20:12
Salut, tu peux nous montrer ton code car comme ça c'est pas vraiment évident de se rendre compte du problème. Autre chose, si tu as des templates les définitions doivent figurer dans le .h, ça peut être une erreur.
void Pile:: empile (char c)
{
if (taille == cap)
{
char * aux;
cap = 2*cap;
aux = new char[cap];
for (int i = 0; i < taille;i++)
{
aux[i] = tab[i];
}
}
tab[taille] = c;
taille++;
}
char Pile:: depile ()
{
if (taille != 0)
{
taille--;
return tab[taille];
}
else
{
cout<<"Attention : Il n'y a plus d'élément dans la pile !!!!"<<endl;
return '@';
}
}
bool prio (char a, char b) //regarde si a est autant ou plus prioritaire que b
{
if (a =='^')
return true; else if ((a '*') || (a '/'))
return (b != '^'); else if ((a '+') || (a '-'))
return ((b != '^') && (b != '*') && (b != '-'));
else return (b == '(');
}
string postfixe (string pref)
{
Pile p;
string post;
for (int i=0;i>pref;
post = postfixe (pref);
cout<<post<<endl;
}
Et lors de la compilation avec dev-c++, voici les erreurs :
[Linker error] undefined reference to `Pile::Pile()'
[Linker error] undefined reference to `Pile::empile(char)'
[Linker error] undefined reference to `Pile::getTaille() const'
[Linker error] undefined reference to `Pile::sommet() const'
[Linker error] undefined reference to `Pile::depile()'
[Linker error] undefined reference to `Pile::empile(char)'
[Linker error] undefined reference to `Pile::sommet() const'
[Linker error] undefined reference to `Pile::depile()'
[Linker error] undefined reference to `Pile::depile()'
[Linker error] undefined reference to `Pile::getTaille() const'
[Linker error] undefined reference to `Pile::depile()'
[Linker error] undefined reference to `Pile::~Pile()'
[Linker error] undefined reference to `Pile::~Pile()'
ld returned 1 exit status
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 13 mars 2007 à 23:02
j'ai compilé tes fichiers et pas de gros soucis, quelques warnings :
- dans la fonction string postfixe (string pref) tu dis que tu retournes une string mais tu ne retournes rien.
- une comparaison signed / unsigned dans main.cc
J'ai teste mais je ne sais pas ce qu'il faut rentrer et erreur de segmentation (faut voir)
Darksnakes
Messages postés19Date d'inscriptionsamedi 21 octobre 2006StatutMembreDernière intervention14 mars 2007 14 mars 2007 à 07:26
effectivement, j'ai oublié de retourner post.
Enfait on nous a demandé de faire la classe d'une pile pour pouvoir transformer une notation mathématique préfixée en postfixée
je compredns pas ce que signifie une comparaison signed / unsigned dans main.cc; on peut m'éclairer merci
et j'ai voulu essayé de compiler en mettant include "Pile.cc" et la il me compile parfaitement, et ça s'exécute bien ormis le fait que mon algo a une petite erreur :-)
Si quelqu'un peut méclairer sur ça et je voudrais savoir comment bien configurer dev-c++
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 14 mars 2007 à 07:35
Bonjour,
Dans ta boucle tu fais
for (int i= 0;i ../..
donc int i est de type unsigned (il peut aussi prendre des valeurs négatives) et pref.length() doit être de type signed (donc toujours > 0). Il suffit de faire
for (unsigned int i =0;i ou for (size_t i=0;i (même chose)
Darksnakes
Messages postés19Date d'inscriptionsamedi 21 octobre 2006StatutMembreDernière intervention14 mars 2007 14 mars 2007 à 20:14
Bonsoir,
Pour le signed j'avais bien compris, mais dev-c++ me detecte pas l'erreur, y'a t'il un moyen de le configurer de façon à ce que il me detecte vraiment toutes les erreures comme le return que j'avais pas mis par exemple.