Bonjour,
J'ai un membre déclaré comme suit :
char Membre[10];
Comment dois je déclarer une fonction retournant ce membre ?
Merci à tous
 
			
			






 
			
			
			
			 
			
				
 retour d'un membre char
 retour d'un membre char
				
				
						
						
				Bonjour,
J'ai un membre déclaré comme suit :
char Membre[10];
Comment dois je déclarer une fonction retournant ce membre ?
Merci à tous
 
 
				
				
						
						
				Pour ne pas pouvoir le modifier à l'extérieur de ta classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part const char* getMembre() const;
 
			
			






 
			
			
			
			 
			
				
 
 
				
				
						
						
				Merci et que dois je mettre après le return de getMembre() ?
 
			
			






 
			
			
			
			 
			
				
 
 
				
				
						
						
				Membre évidemment ... Pffff
 
			
			






 
			
			
			
			 
			
				
 
 
				
				
						
						
				Le problème que je rencontre après est que je dois utiliser la valeur retounée dans strcat et le compilateur me dit :
cannot convert parameter 1 from 'const char *' to 'char *'
dans l'instruction :
strcat(APP.GetMembre(),cEnglishLanguageFileName)
 
 
				
				
						
						
				Normal, tu es entrain d'essayer de modifier (avec strcat()) un pointeur dont le contenu est constant.
Une solution (peut être) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
 
 
				
				
						
						
				Et c'est bien...
Si tu permet à une fonction externe de modifier une variable membre de ta classe, tu violes un principe fondamentale de la POO : l'encapsulation.
Bien sur, il suffirait que tu enlèves les const de la fonction GetMembre() pour résoude ton pb de compile et prier pour que cEnglishLanguageFileName ne dépasse jamais 10 caractères...
Si tu me permets un conseil :
1. Fais un membre de type std::string, qui est plus flexible qu'un buffer de char.
2. Fais un SetMembre() qui met à jour, avec tout les contrôles nécessaire ta variable membre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
 
 
				
				
						
						
				Hou la la ! Ca sent le core dump à plein nez ton histoire...
Si tu écris çaBien sûr ça va marcher, mais cette implémentation masque completement le fait que Membre ne fait que 10 caractères. Or le strcat n'a aucun moyen de vérifier que tu ne dépasses pas ces 10 caractères !
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Donc, tôt ou tard, ta cEnglishLanguageFileName fera + de 10 caractères et ce sera le core dump.
Tu as la chance de travailler avec un langage qui est un pur bijoux, alors sers-t-en !
Comme le dit ram-0000, utilise les std::string !
Tu verras, c'est que du bonheur...
Ce code est encore très discutable, mais au moins il est fiable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Et puis tu arrêtes de d'emm... avec la bibliothèque string.h qui demande une certaine habitude...
[EDIT] argl ! j'ai été coiffé au poteau par Grulim...
 
 
				
				
						
						
				Bonjour,
J'aurais tendance à faire plutôt comme ça :
Mais pour être franc, j'aurais carrément tendance à ne pas utiliser char[10] ni en membre ni en retour de fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
-> std::string s'il s'agit de modéliser une chaîne de caractère
-> std::vector<char> s'il s'agit d'un vecteur dynamique
-> boost::array<char,10> ou std::tr1::array<char,10> s'il s'agit d'un vecteur de taille déterminée à la compilation.
Et in fine, utiliser le type unsigned char et non char s'il s'agit de manipuler des octets.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Partager