Acces aux attribut prives

Fermé
marlinne Messages postés 20 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013 - 12 oct. 2013 à 09:51
marlinne Messages postés 20 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013 - 13 oct. 2013 à 16:07
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 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 13:56
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
12 oct. 2013 à 16:15
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 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 16:38
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
12 oct. 2013 à 16:53
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 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 17:01
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
12 oct. 2013 à 17:10
mais la je ne surcharge pas l'opérateur [] or ceci est demandé ...
Oo
0
BunoCS Messages postés 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 17:13
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
12 oct. 2013 à 17:15
un opérateur[] qui retourne x , y ou z selon son argument .. !!
0
BunoCS Messages postés 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 17:24
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
12 oct. 2013 à 17:31
ouiiiii je sais bien !! : )
et j'apprécie vraiment ton attention et ton aide !!
c'est gentil
0
BunoCS Messages postés 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
12 oct. 2013 à 17:46
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 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
13 oct. 2013 à 12:10
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
13 oct. 2013 à 12:57
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
13 oct. 2013 à 13:09
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
13 oct. 2013 à 13:23
je l'ai réglé ce soucis lol
0
marlinne Messages postés 20 Date d'inscription mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
13 oct. 2013 à 13:43
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 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
13 oct. 2013 à 15:56
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 mardi 5 juin 2012 Statut Membre Dernière intervention 13 octobre 2013
13 oct. 2013 à 16:07
ouiii
0