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 :

Pointeurs et classes perso


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 46
    Par défaut Pointeurs et classes perso
    Yop all,
    Je suis débutant en C++, en pointeurs aussi, soyez indulgents
    Alors le problème :
    J'ai une classe "square" (une case) avec les coordonnées et compagnie comme champs. Une autre classe path, qui doit contenir une liste de pointeurs vers des cases ("square")
    J'ai donc ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class path {
        private:
            square* squares[50];
            int size;
        public:
            void appendSquare(square _square);
            int getSize();
            square* getSquare(int id);
    };
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void path::appendSquare(square _square)
    {
        *squares[size] = &_square;
    }
    mais pan :

    error: no match for 'operator=' in '*((path*)this)->path::squares[((path*)this)->path::size] = &_square'

    sur la ligne de la fonction appendSquare. Je comprends pas trop :/

    Des idées?
    A vot' bon coeur

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *squares[size] = &_square;
    L'étoile est en trop. Tu ne dois l'utiliser que lorsque tu veux accéder à l'objet square pointé ; or là ce n'est pas un objet square que tu veux réaffecter, mais une adresse d'objet square.

    Ceci-dit, ton paramètre _square est passé par valeur à la fonction, ce qui signifie que ce n'est qu'une copie de l'original, et qu'elle sera détruite dès la sortie de la fonction. Stocker son adresse est donc une erreur, puisqu'immédiatement après l'appel elle pointera sur un objet détruit.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 46
    Par défaut
    merci de vos réponses rapides

    Citation Envoyé par Laurent Gomila
    L'étoile est en trop. Tu ne dois l'utiliser que lorsque tu veux accéder à l'objet square pointé ; or là ce n'est pas un objet square que tu veux réaffecter, mais une adresse d'objet square.

    Ceci-dit, ton paramètre _square est passé par valeur à la fonction, ce qui signifie que ce n'est qu'une copie de l'original, et qu'elle sera détruite dès la sortie de la fonction. Stocker son adresse est donc une erreur, puisqu'immédiatement après l'appel elle pointera sur un objet détruit.
    Ok, donc ma méthode est pourrie. Ce que je voudrais, c'est pouvoir retrouver les coordonnées de mon chemin, sans pour autant les restocker bêtement alors que j'ai déjà mes cases de créées. il faudrait plutôt que je fasse un truc comme ça à ce moment là? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void path::appendSquare(square *_square)
    {
        squares[size] = _square;
    }
    merci

    /me, qui a vraiment du mal avec tout ce qui a des étoiles...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par izguit
    Ce que je voudrais, c'est pouvoir retrouver les coordonnées de mon chemin, sans pour autant les restocker bêtement alors que j'ai déjà mes cases de créées. il faudrait plutôt que je fasse un truc comme ça à ce moment là? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void path::appendSquare(square *_square)
    {
        squares[size] = _square;
    }
    Oui

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 46
    Par défaut
    Merci beaucoup

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Par défaut
    Utiliser un vecteur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <vector>
     
    class path {
        private:
            vector<square> squares;
            int size;
        public:
            void appendSquare(square _square);
            int getSize();
            square getSquare(int id);
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void path::appendSquare(square _square)
    {
        squares.push_back(_square);
    }

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par ZeRiL
    Utiliser un vecteur ?
    Un vecteur peut-être (bien qu'ici si la dimension 50 est fixe ça ne servirait à rien), mais de pointeurs alors (relis l'énoncé).

  8. #8
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Par défaut
    Citation Envoyé par Laurent Gomila
    Un vecteur peut-être (bien qu'ici si la dimension 50 est fixe ça ne servirait à rien), mais de pointeurs alors (relis l'énoncé).
    Au temps pour moi. Si effectivement la taille est fixe... mea culpa. J'lis trop vite

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  2. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  3. [C#] Pointeur de classe
    Par papouAlain dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/01/2005, 12h32
  4. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07
  5. [ JSP ] [ Tomcat ] importer une classe perso
    Par captainpouet dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 11/03/2004, 11h30

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