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 :

Erreur étonnante à propos des pointeurs!


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 56
    Par défaut Erreur étonnante à propos des pointeurs!
    Salut à tous!
    En fait c'est une erreur dont je cherches la solution il y a environ une semaine.
    En fait je crée un pointeur vers une instance de la classe "Chemin".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Chemin * travail = depart;
    depart est un attribut de la classe itineraire et qui est pointeur vers une instance de la classe "Chemin".
    voici l'implémentation de la fameuse classe "Chemin":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        #include "Case.h"
        class Case;
        class Chemin
        {
        friend class Itineraire;
        private:
        Chemin(int ligne, int colonne):m_case(ligne,colonne){}
              Chemin(Case const & c):m_case(c){}
        Chemin(Chemin const &);
        Chemin(void):m_case(0,0){}
        Case m_case;
                Chemin* m_next;
        };
    et dès que j'appelle la case "m_case" toutes les valeurs de l'instance sur laquelle on pointe changent!!
    donc après cette ligne de code:

    tout change!
    enfin voici l'implémentation de la classe case :

    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
        class Case
        {
           friend class Itineraire;
        private:
     
           int ligne;
           int colonne;
     
        public:
     
     
           int get_Ligne() const;
           int get_Col()const ;
           void set_Ligne(const int);
           void set_Colonne(const int);
           Case(void):ligne(0),colonne(0){};
           Case(int,int);
           ~Case(void);
        };
    Veuillez me donnez quelques explications ...

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Si tu veux qu'on résolve rapidement le problème, il faudrait un bout de code *minimale* et *compilable* qui reproduit le problème, avec quelques printf avant/après des attributs en question, parce que pour le moment c'est assez difficile de se faire une idée de ce que tu veux dire par "un appel à la case m_case" qui ferait "changer les valeurs de l'instance sur laquelle on pointe".
    Merci.

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 56
    Par défaut
    Voici la méthode qui accède à "m_case"
    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
    void Itineraire::afficher() const
    {
     
     
        Chemin * travail = depart;
     
       while(travail) 
       {
     
     
     
    	  cout<< "("<<travail->m_case.get_Col() ;
    	   cout	   <<","<<travail->m_case.get_Ligne();
              cout<<")"<<std::endl;
     
    		  travail=travail->m_next;
     
     
       }
    }
    et- "Itineraire.h" sera
    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
    #include "Grille.h"
    #include "Case.h"
    #include "Chemin.h"
    #include <iostream>
    using namespace std;
    class Case;
    class Itineraire
    {
     
    private:
     
    	Chemin *depart;
    	Chemin *arrivee;
     
     
     
     
     
    public:
    	Itineraire(void);
    	Itineraire(Chemin* depart);
    	~Itineraire(void);
    	void add(Case const&);
    	void afficher() const;
    };

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Ton erreur me fait penser à un problème de pointeur. As-tu vérifier que la création de ta liste se passe bien ? Comment est initialisé m_next ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 56
    Par défaut
    En fait lorsque j'initialise m_next à NULL il m'affiche une erreur"identificateur non déclaré"(mais parfois il exécute sans rien afficher et dès qu'on fait une autre erreur il revient à cette erreur d'"identificateur non déclaré")

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/06/2011, 22h14
  2. Réponses: 6
    Dernier message: 05/05/2010, 15h21
  3. A propos des pointeurs
    Par emprex dans le forum Débuter
    Réponses: 3
    Dernier message: 26/03/2010, 15h29
  4. Erreurs de compilation des pointeurs
    Par hanry dans le forum Débuter
    Réponses: 7
    Dernier message: 18/03/2008, 14h34
  5. à propos des pointeurs
    Par salseropom dans le forum C++
    Réponses: 20
    Dernier message: 24/03/2005, 09h37

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