Acces aux attribut prives

marlinne Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
marlinne Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

18 réponses

BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
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
marlinne Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
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
marlinne Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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