Tableaux et classes c++

Résolu/Fermé
seabust Messages postés 740 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 30 juillet 2015 - 9 sept. 2010 à 21:24
seabust Messages postés 740 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 30 juillet 2015 - 12 sept. 2010 à 15:56
Bonjour,
Je développe un programme en c++, j'ai un objet de classe carte qui a un attribut contenu qui contient un tableau bi-dimensionnel (x,y) contenant des objets de classe Zone.
or je n'arrive pas, par une methode de l'objet carte pouvoir modifier les attributs d'un objet Zone voulu. car je pe retrouve avec des copies de ces objets.

Je vous joint la methode permettant de renvoyer un objet Zone voulu:

Zone Carte::get_zone(int x , int y)
{
	Zone &case=contenu[x][y];
	return case;
	
	
}


j'ai déja éssayé d'utiliser des pointeurs mais j'obtient l'erreure suivante:

conversion from 'Zone*' to non-scalar type 'Zone' requested




2 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 10/09/2010 à 08:26
Il faut retourner une référence, sinon, tu retournes une copie.
Zone& Carte::get_zone(int x , int y) 
{ 
 return contenu[x][y]; 
  
} 
const Zone Carte::get_zone(int x , int y)const 
{ 
 return contenu[x][y]; 
  
} 


La première méthode sert à la modification et s'applique directement à un objet, la deuxième sert à la lecture et s'appliquera plutôt à des objets constant ou temporaires. Dernière précision, ce n'est pas l'une ou l'autre qu'il faut, mais les deux.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
3
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
10 sept. 2010 à 09:23
+1 ...

J'ajouterai que pour comprendre la nnotion de copie / référence / pointeur, il faut s'interesser aux notions de pile d'appels et de tas mémoire. tout ce qui est déclaré dans l'entête d'une fonction passe par la pile d'appels. Si on place des pointeurs, les pointeurs sont sur la pile d'appels, mais "pointent" sur l'objet (qui lui peut être situé sur le tas ou sur la pile)....

quand on crée avec un "new" on crée sur le tas, sinon c'est sur la pile ...
0
seabust Messages postés 740 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 30 juillet 2015 101
12 sept. 2010 à 15:56
merci :D
0