IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probleme de compilation C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut Probleme de compilation C++
    j ai une classe voiture :
    voiture.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #ifndef VOITURE_H
    #define VOITURE_H
    #include "cdate.h"
    #include "cloc.h"
    #include <string>
    #include <list>
    using namespace std;
     
     
    class Voiture {
     public:
      Voiture(); 
      Voiture(const string, const int, const string,const list<CLoc>);
      ~Voiture();
      int GetKm() const;
      void SetKm(int);
      string GetIm();
      void SetIm(string);
      string GetMarque();
      void SetMarque(string);
      void Affiche() ;
      // list<CLoc> loc;
      void ajouterLoc (CLoc);
      void test (int i);
     
     private:
      string immatriculation;
      int kilometrage;
      string marque;
      list<CLoc> loc; //liste contenant les location
      list<int> ls; //juste pour test
    };
     
    #endif
    voici le voiture.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include "cvoiture.h"
    #include "cloc.h"
    #include "cdate.h"
    #include <list>
    #include <string>
    #include <iostream>
    using namespace std;
     
    Voiture::Voiture() {}
     
    Voiture::Voiture(const string im, const int km, const string marq,const list<CLoc> location)
     
     {
      immatriculation=im;
      kilometrage=km;
      marque=marq;
     
      }
     
    Voiture::~Voiture() {
     
    }
     
    void Voiture::ajouterLoc (CLoc c) {
     
      loc.push_front(c);//
    COMPILE errueur:
    /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_construct.h: In function `void std::_Construct(_T1*, const _T2&) [with _T1 = CLoc, _T2 = CLoc]':
    /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_list.h:438: instantiated from `std::_List_node<_Tp>* std::list<_Tp, _Alloc>::_M_create_node(const _Tp&) [with _Tp = CLoc, _Alloc = std::allocator<CLoc>]'
    /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_list.h:1163: instantiated from `void std::list<_Tp, _Alloc>::_M_insert(std::_List_iterator<_Tp>, const _Tp&) [with _Tp = CLoc, _Alloc = std::allocator<CLoc>]'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    }
     
    void Voiture::test (int i) {
     
      ls.push_front(i);
    COMPILE OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    }
     
    int Voiture::GetKm() const
    {
      return kilometrage;
    }
    void Voiture::SetKm(int km) {
      kilometrage=km;
    }
    string Voiture::GetIm() {
      return immatriculation;
    }
    void Voiture::SetIm(string im) {
      immatriculation=im;
    }
    string Voiture::GetMarque() {
      return marque;
    }
    void  Voiture::SetMarque(string m) {
      marque=m;
    }
    void Voiture::Affiche()  {
       cout<<"________Voiture________"<<endl;
       cout<<"immatriculation : "<<GetIm()<<endl;
       cout<<"Kilométrage     : "<<GetKm()<<endl;
       cout<<"Marque          : "<<GetMarque()<<endl;
     
    }
    Alors pourquoi alors que je peux manipuler ma liste d'entier, je ne peux pas manipuler ma liste de CLoc, il s agit d'une classe contenant (deux date s et un booléens). Il semble peut etre qu'il y ait un probleme de constructeur??? Je suis perdu.[/code]

  2. #2
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Cloc a-t-il un constructeur par défaut et un constructeur par copie ?
    Sont-ils tous les deux public ?
    Peux-tu nous donner Cloc.h ?
    ok je t'aide pas trop là, mais c'est histoire de faire avancer le shmilimmilimblic

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut
    Une chose qui m'agresse les yeux quand je lit ton code, c'est que tu passe tout par valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Voiture::Voiture(const string im, const int km, const string marq,const list<CLoc> location)
    Signifie que tu vas faire une copie inutile de im, marq et location. Je te dit pas le gachi mémoire et cpu si ce sont de gros objets. Utilise les références pour éviter ça.
    Tu trouveras une explication sur ce que c'est ici :
    http://cpp.developpez.com/cours/cpp/

    Ensuite, pourquoi passes-tu location dans tes arguments si tu ne t'en sert pas ?
    D'ailleur, j'ai l'impression que ton compilateur gueule par ce qu'il n'arrive justement pas à trouver comment recopier cette liste.

    Et pour finir, tu devrais lire ça :
    http://c.developpez.com/faq/cpp/?pag...EUR_liste_init

    Reviens nous voir si tu as toujours ton problème après ça.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut
    cloc.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #ifndef LOC_H
    #define LOC_H
    #include <iostream>
    #include "cdate.h"
    #include <list>
    using namespace std;
     
    class CLoc {
     public:
      CLoc();
      CLoc(bool,CDate,CDate);
      //constructeur de copie
      CLoc(CLoc &o);
      ~CLoc();
      bool GetLoue ();
      void SetLoue (bool);
      CDate GetDeb();
      void SetDeb(CDate);
       CDate GetFin();
       void SetFin(CDate);
     private:
      bool loue;
      CDate debut;
      CDate fin;
     
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <cassert>
    #include <string>
    #include <iostream>
     
    using namespace std;
    #include "cloc.h"
    #include "cdate.h"
    CLoc::CLoc() {}
    CLoc::CLoc(bool l,CDate d,CDate f) {
      loue=l;
      debut=debut;
      fin=f;
    }
    CLoc::CLoc(CLoc &o) {
      loue=o.GetLoue();
      debut=o.GetDeb();
      fin=o.GetFin();
    }
    CLoc::~CLoc () {}
    bool CLoc::GetLoue () {
      return loue;
    }
    void CLoc::SetLoue ( bool b ) {
      loue=b;
    }
     
    CDate CLoc::GetDeb () {
      return debut;
    }
    void CLoc::SetDeb ( CDate deb ) {
      debut=deb;
    }
    CDate CLoc::CLoc::GetFin () {
      return fin;
    }
    void CLoc::SetFin ( CDate f ) {
      fin=f;
    }

  5. #5
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    à part les intialisateurs dans les constructeur comme te l'a fais remarquer Julien, je ne voit rien de qui cloche.
    Quand j'ai 5 misn je test au compilo chez moi.

  6. #6
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    bon alors je devais pas avoir les yeux en face des trous car ce sont des erreurs classique que tu as fait.

    1) le constructeur par copie utilisé par la liste (et beacoup d'autres conteneur s STL) est:
    et non pas comme tu l'avais mis. un petit const ça change tout !

    2) si tu fais ça tu doit changer le proto des fonctions appellées dedans. en effet ta référence étant const, tu n'a le droit d'appeler dessus que des méthodes const. Donc il faut que tu modifes tes accesseurs en lectures de ta classe Cloc.

    Sinon tu devrait fair un peu le ménage dans ton code. Il ya des #includes sur des header non utilisé et les using namespace il vaut mieux eviter dans les
    header.

    Si cela fonctionne pense à cliquer sur résolu.

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Voiture::~Voiture() {
     
    }
    Ca sert a quoi?

    A respecter la forme canonique de Coplien?

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Une petite remarque : il faut éviter les "using namespace" dans les .h:
    http://c.developpez.com/faq/cpp/?pag...sing_namespace

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut
    Merci .
    effectivement il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CLoc (const CLock ..)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [API][Cup] problem niveau compilation
    Par KoLziG dans le forum Général Java
    Réponses: 1
    Dernier message: 02/01/2005, 19h30
  2. [JSP & TAGLIB] Probleme de compilation
    Par GesMo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 17/05/2004, 15h03
  3. Probleme de Compilation de la STL
    Par stoluup dans le forum MFC
    Réponses: 3
    Dernier message: 05/05/2004, 17h25
  4. [TP]Probleme de compilation sous TP7
    Par yffick dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 18/12/2003, 20h32
  5. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo