2017-09-16 14 views
1

J'ai une classe avec un attribut de chaîne, et mes getters doivent renvoyer des valeurs & pour ces attributs.Manière correcte de renvoyer la référence de chaîne dans le getter

La seule façon que je réussi à le faire sans obtenir des erreurs est comme ceci:

inline string& Class::getStringAttribute() const{ 
    static string dup = stringAttribute; 
    return dup; 
} 

Quelle est la bonne façon d'écrire un getter renvoyant une référence de chaîne d'un attribut de chaîne privée en C++?

comme ça Faire:

inline string& Class::getStringAttribute() const{ 
    return stringAttribute; 
} 

me fait cette erreur:

error: invalid initialization of reference of type ‘std::string& {aka std::basic_string<char>&}’ from expression of type ‘const string {aka const std::basic_string<char>}’ 
+0

La méthode habituelle serait 'return stringAttribute;'. Si vous obtenez des erreurs, vous devez inclure le texte intégral des messages d'erreur dans votre question. –

+0

@PeteBecker Je l'ai essayé, mais j'ai eu cette erreur: erreur : initialisation invalide de la référence de type 'std :: string & {aka std :: basic_string &}' de l'expression de type 'const string {aka const std :: basic_string } ' –

+0

Nice pseudo guy français: D –

Répondre

2

Le problème ici est que vous avez marqué votre méthode comme const. Par conséquent, aucun état à l'intérieur de l'objet ne peut changer. Si vous renvoyez un alias à une variable membre (stringAttribute, dans ce cas), vous autorisez des changements dans l'état à l'intérieur de l'objet (le code en dehors de l'objet peut changer la chaîne).

Il existe deux solutions possibles: soit retourner simplement un string, dans lequel une copie de stringAttribute sera retournée (et donc l'état de l'objet reste le même) ou retourner une chaîne const, dans laquelle quiconque a appelé la méthode ne peut pas changer la valeur de stringAttribute.

En outre, vous pouvez supprimer le const de getStringAttribute(), mais n'importe qui serait en mesure de changer la valeur de stringAttribute, que vous pouvez ou ne pas vouloir.