Probleme compilation Dev-c++

Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 mars 2007 - 13 mars 2007 à 15:18
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Derniè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

Yann

12 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
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.
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
13 mars 2007 à 22:29
Bonsoir,

tu es sous quel OS ? fait attention avec le minuscule et majuscule sous linux par exemple...
Une bonne habitude (je pense) : tout en minuscule.

Matt...
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 mars 2007
13 mars 2007 à 22:37
Bon, je sais pas si le code est juste mais le voici (j'ai que je débuté :-)

Pile.h

#ifndef Pile_h
#define Pile_h

using namespace std;

class Pile
{
      private :
             
              char * tab;
              int cap;
              int taille;
     
      public :
            
             Pile();
             Pile(const Pile &);
            
             ~Pile();
            
             int getTaille()const;
             bool estVide ()const;
             char sommet()const;
             void empile(char);
             char depile();
            
             void affiche()const;
            
};
#endif

Pile.cc

#include
using namespace std;
#include "Pile.h"

Pile:: Pile (){cap 10;taille 0;tab = new char[10];}
           
Pile:: Pile (const Pile & p)
{
           cap = p.cap;
           taille = p.taille;
           tab = new char[cap];
           for (int i = 0;i < taille;i++)
               {
                    tab[i] = p.tab[i];
               }
}                        
                
Pile:: ~Pile()
{delete[] tab;}
            
int Pile::getTaille ()const
{return taille;}

bool Pile:: estVide ()const
{
     if (taille == 0)
        return true;
     else return false;
}
                  
char Pile:: sommet ()const
{
    if (taille != 0)
       return tab[taille-1];
    else return'@';
}  
                  
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 '@';
          }
}

void Pile:: affiche ()const
{
     for (int i=0;i<taille;i++)
         {
              cout<<tab[i];
         }
     cout<<endl;
}

Test.cc

#include
using namespace std;
#include "Pile.h"
#include <string>

bool estOpe (char c)
{  if ((c '+') || (c '-') || (c == '*') || (c == '/') || (c == '^'))
    return true;
  else return false;
}

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

Voila, si vous pouvez m'aider merci d'avance

Yann
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 mars 2007
13 mars 2007 à 22:39
Désolé pour le double post, j'avais pas vu la 2 ème question : Je suis sous windows XP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
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)

Matt...
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 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

Yann
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 07:33
j'ai modifier le code en rajountant le return

...
 while (p.getTaille() != 0)
        {
         post+=p.depile();
        }
  return post;
...

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++

Merci

Yann
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
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)

Matt...
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 07:53
Bon merci pour la réponse rapide, la je vais en cours, je verrais ça ce soir

Merci encore

Yann
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
14 mars 2007 à 19:32
bonsoir,

je me relis et je bien sur il faut lire signed >= 0 et non<strike>signed > 0</strike> 

Matt...
0
Darksnakes Messages postés 19 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 14 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.

Merci

Yann  
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
14 mars 2007 à 21:41
Bonsoir,

Désolé, je connais pas trop dev c++ !!! Mais je pense qu'il doit y avoir moyen.

Matt...
0
Rejoignez-nous