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 :

Récuperation de valeur


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 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut Récuperation de valeur
    Bonjour...

    Je souhaite faire ceci (en théorie ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int w = _max.Get_Position.Get_X() - _min.Get_Position.Get_X();
    sachant que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Truc _max(10,0);
    Truc _min(0,0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Truc
    {
    private:
    Point _mPt;
    ...
     
    public:
    Truc(int x, int y) {_mPt = Point(x,y);}
    ~Truc() {}
    const Point& Get_Position() const {return _mPt;}
    }
    et que la classe Point est définie de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Point
    private:
    int _X;
    int _Y;
    public:
    Point(int x, int y) {_X = x; _Y=y;}
    ~Point() {}
    const int& Get_X() const {return _X;}
    const int& Get_Y() const {return _Y;}
    }
    Lorsque je compile mon code sous visual studio, celui me sort l'erreur :
    error C2228: la partie gauche de '.Get_X' doit avoir un class/struct/union
    Pourriez-vous eclairer ma lanterne face à ce petit problème fort simple, mais pour moi d'une complexité redoutable...

    Bon, je continue à googler....

    Merci

    PS: je viens de C#...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    Get_Position c'est une fonction. Pour appeler une fonction faut mettre des parenthèses. _max.Get_Position().Get_X()
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut
    Salut...

    ça, je le sais...

    Lorsque je l'ai écrit et compilé, VS m'a sorti ce genre de réflexion :
    l'objet a des qualificateurs de types incompatibles avec la fonction membre ...
    d'où le retrait des parenthèses sur Get_Position pour essayer.

    Bon, suite à ta réflexion, j'ai remis les parenthèses et Ô Miracle, je compile sans problème...

    Maintenant, comment puis-je modifier la valeur de _X appartenant à _mPt à partir de _max ? Sans passer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Fonction de la classe Truc
    void Change_X(const int& x)
    {
    _mPt.X = x;
    }
    Voyez-vous la chose ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Je comprends mal ou tu demandes comment changer une variable private depuis l'extérieur de la classe sans passer par une fonction ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut
    Dans ma tête, c'est clair

    Je suis habitué sous c# à utiliser les propertys Get et Set... donc j'aimerai reprendre le même principe...
    Je connais la chose suivante sous c++ (après recherche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __declspec(property(put = Set_X, get = Get_X)) int X
    Alors, tu dis :
    tu demandes comment changer une variable private depuis l'extérieur de la classe sans passer par une fonction ?
    Pour ça, j'ai ma fonction Set_X(const int& x) qui est public et je voudrai toujours l'utiliser.

    Donc pour faire simple :
    mMin (contient _mPt [modifiable par Set_Point] (contient _X [modifiable par Set_X]))
    Suis-je obligé de créer la fonction suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Fonction de la classe Truc
    void Change_X(const int& x)
    {
    _mPt.X = x;
    }
    Mais dans ce cas, si ma classe Point contient plusieurs variables, dois-je écrire une fonction pour chaque variable que je souhaite modifier ultérieurement comme Change_X ?
    N'y a t-il pas un moyen un peu plus direct ?

    J'espère que mon explication est un peu plus clair...

    Merci pour la patience...

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Bonjour

    Citation Envoyé par Dokare Voir le message
    N'y a t-il pas un moyen un peu plus direct ?
    Si, mettre les données membres en public (ou avoir une fonction membre qui renvoi une référence). Cela a du sens pour la classe point.
    De façon générale, on ne peut mettre une donnée membre en public uniquement si l'utilisateur peut l'utiliser sans mettre l'objet dans un état incohérent.

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

Discussions similaires

  1. récuperer la valeur d'un paramètre
    Par pelelive dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2005, 16h10
  2. [VB.NET]Récuperer des valeurs d'une autre page
    Par Dnx dans le forum ASP.NET
    Réponses: 8
    Dernier message: 12/05/2005, 16h19
  3. [JCheckBox] Récuperer les valeurs
    Par Regis.C dans le forum Composants
    Réponses: 3
    Dernier message: 12/04/2005, 21h19
  4. Récuperer la valeur d'un entier
    Par Sniper37 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/03/2005, 12h13
  5. [jsp] récuperation de valeur d'un formulaire
    Par peppena dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 30/03/2004, 21h00

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