Probleme compilation Dev-c++

Signaler
Messages postés
19
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
14 mars 2007
-
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
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

Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
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.
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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

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

Désolé pour le double post, j'avais pas vu la 2 ème question : Je suis sous windows XP
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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

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

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

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

Bon merci pour la réponse rapide, la je vais en cours, je verrais ça ce soir

Merci encore

Yann
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

bonsoir,

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

Matt...
Messages postés
19
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
14 mars 2007

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

Bonsoir,

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

Matt...