Acces aux attribut prives

marlinne Messages postés 24 Statut Membre -  
marlinne Messages postés 24 Statut Membre -
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. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  2. marlinne Messages postés 24 Statut Membre
     
    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
  3. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  4. marlinne Messages postés 24 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  7. marlinne Messages postés 24 Statut Membre
     
    mais la je ne surcharge pas l'opérateur [] or ceci est demandé ...
    Oo
    0
  8. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  9. marlinne Messages postés 24 Statut Membre
     
    un opérateur[] qui retourne x , y ou z selon son argument .. !!
    0
  10. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  11. marlinne Messages postés 24 Statut Membre
     
    ouiiiii je sais bien !! : )
    et j'apprécie vraiment ton attention et ton aide !!
    c'est gentil
    0
  12. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  13. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    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
  14. marlinne Messages postés 24 Statut Membre
     
    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
  15. marlinne Messages postés 24 Statut Membre
     
    ofait j'ai teste rien que les getters qui me font ces erreurs la
    je ne pourrai pas les utiliser donnc !!
    Oo
    0
  16. marlinne Messages postés 24 Statut Membre
     
    je l'ai réglé ce soucis lol
    0
  17. marlinne Messages postés 24 Statut Membre
     
    sauf que l'operateur ne marche pas correctement
    quand je fais : position[0]=0;
    on me dit : non left-value in assignement ..
    Oo
    0
  18. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    position est de type Vecteur3D. As-tu redéfini l'opérateur [] dans la classe Vecteur3D?
    0
  19. marlinne Messages postés 24 Statut Membre
     
    ouiii
    0