Acces aux attribut prives

Bonjour ;
j'ai un tout petit soucis mais qui me bloque en fait il s'agit d'un opérateur que je définis dans une classe mobile mais qui retourne un attribut de la classe Vecteur ... ça ne compile pas en en me disant que x n'est pas défini !!

double Mobile ::operator[] ( int p ) const {
if ( p==0 )
return Vecteur3D::x;
return 0.0;

}
que pourrait je faire pour retourner "x" qui est un attribut de la classe Vecteur ?
Merci

18 réponses

  1. Modérateur
    Hello,
    Effectivement, y'a souci.
    D'après ton code, j'imagine que tu veux retourner une valeur présente dans un vecteur, ou un tableau. Mais, pour ça, il faut que tu aies un attribut de type Vecteur3D dans ta classe Mobile.

    public class Mobile
    {
    Vecteur3D mVecteur;
    ...
    }

    Du coup, ton code serait plutôt le suivant:

    double Mobile ::operator[] ( int p ) const {
    double result = 0.0;
    if ( p==0 )
    result = mVecteur.x;
    return result;
    }


    En passant, si tu as plusieurs tests à faire (ce que je pense), je te propose ceci

    double Mobile ::operator[] ( int p ) const {
    double result = 0.0;
    switch(p)
    {
    case 0:
    result = mVecteur.x;
    break;
    case 1:
    result = mVecteur.y;
    break;
    case 2:
    result = mVecteur.z;
    break;
    default:
    result = 0.0;
    }

    return result;
    }


    A noter, que j'ai pris en compte le fait que ton attribut mVecteur soit correctement initialisé.
    0
    1. Bonjouuur ;
      Merci bien pour ta réponse
      Mais enfait j'ai deux attributs de types Vecteur3D dans mobile a voir : position et vitesse
      du coup je ne sais pas lequel mettre comme "mVecteur" que tu as choisis
      prcq normalement je veux que le compilateur comprenne quand j'écris position[0] et vitesse[0]....

      ???
      0
      1. Modérateur
        C'est à toi de voir ce que tu veux faire en implémentant l'opérateur [].
        J'ai mis
        mVecteur
        pour te montrer mais tu peux le remplacer par
        position
        ou
        vitesse
        suivant tes besoins
        0
        1. J'ai besoin des deux !! il faut qu'il reconnaisse position[0] par expl et aussi vitesse[2] ...
          tu me comprends ?!
          Merci d'avance ..
          0
          1. Modérateur
            tu me comprends ?!
            Oui et non.
            Je vois ce que tu veux faire mais vu la signature de la surcharge de l'opérateur [], tu ne peux retourner qu'un double. Il te faut donc 2 méthodes, par exemple

            double Mobile::getPosition(int p) const {
            double result = 0.0;
            switch(p)
            {
            case 0:
            result = position.x;
            break;
            case 1:
            result = position.y;
            break;
            case 2:
            result = position.z;
            break;
            default:
            result = 0.0;
            }

            return result;
            }

            double Mobile::getVitesse(int p) const {
            double result = 0.0;
            switch(p)
            {
            case 0:
            result = vitesse.x;
            break;
            case 1:
            result = vitesse.y;
            break;
            case 2:
            result = vitesse.z;
            break;
            default:
            result = 0.0;
            }

            return result;
            }

            ça répond à ton besoin?
            0
            1. mais la je ne surcharge pas l'opérateur [] or ceci est demandé ...
              Oo
              0
              1. Modérateur
                Et il t'es demandé de retourné quoi?
                Tu ne peux pas retourner la vitesse ET la position en même temps.
                A moins de créer une paire de doubles, mais je ne pense pas que cela soit demandé
                0
                1. un opérateur[] qui retourne x , y ou z selon son argument .. !!
                  0
                  1. Modérateur
                    Donc la position. Donc ma réponse ici n'est pas trop mal, en remplaçant mVecteur par position

                    .. !!
                    Hey! Désolé si je comprends mal, je n'ai pas l'énoncé sous les yeux. Je peux aussi te laisser tranquille si tu le souhaites... ;)

                    Je n'ai rien à gagner dans l'histoire...C'est juste un passe-temps: j'aide les autres si je le peux. En retour, je ne demande rien, si ce n'est un petit "merci"
                    0
                    1. ouiiiii je sais bien !! : )
                      et j'apprécie vraiment ton attention et ton aide !!
                      c'est gentil
                      0
                      1. Modérateur
                        Je viens de penser à une chose:

                        double Mobile ::operator[] (int p) const {
                        double result = 0.0;
                        switch(p)
                        {
                        case 0:
                        result = position.x;
                        break;
                        case 1:
                        result = position.y;
                        break;
                        case 2:
                        result = position.z;
                        break;
                        case 3:
                        result = vitesse.x;
                        break;
                        case 4:
                        result = vitesse.y;
                        break;
                        case 5:
                        result = vitesse.z;
                        break;
                        default:
                        result = 0.0;
                        }

                        return result;
                        }

                        Mais je ne sais pas si ça répond vraiment à la question.
                        0
                        1. Modérateur
                          Re,
                          Pour corriger tes problèmes d'attributs private:

                          double Mobile ::operator[] (int p) const {
                          double result = 0.0;
                          switch(p)
                          {
                          case 0:
                          result = position.getX();
                          break;
                          case 1:
                          result = position.getY();
                          break;
                          case 2:
                          result = position.getZ();
                          break;
                          case 3:
                          result = vitesse.getX();
                          break;
                          case 4:
                          result = vitesse.getY();
                          break;
                          case 5:
                          result = vitesse.getZ();
                          break;
                          default:
                          result = 0.0;
                          }

                          return result;
                          }
                          0
                          1. je n'arrive même pas a tester ta proposition
                            le compilateur déconne
                            même en mettant rien dans mon fichier Veteur.cpp
                            il me rend 180 erreurs et me génère un fichier streambuf !!!!!
                            je ne comprends plus rien !!
                            0
                            1. ofait j'ai teste rien que les getters qui me font ces erreurs la
                              je ne pourrai pas les utiliser donnc !!
                              Oo
                              0
                              1. je l'ai réglé ce soucis lol
                                0
                                1. sauf que l'operateur ne marche pas correctement
                                  quand je fais : position[0]=0;
                                  on me dit : non left-value in assignement ..
                                  Oo
                                  0
                                  1. Modérateur
                                    position est de type Vecteur3D. As-tu redéfini l'opérateur [] dans la classe Vecteur3D?
                                    0