2011-08-28 3 views
2

J'ai une méthode setValue(string& val) que j'ai besoin d'appeler pour certaines valeurs par défaut.
Je voudrais l'appeler comme ceci:comment convertir char [] en chaîne &

setValue(""); 
setValue("random value"); 

mais je reçois l'erreur suivante avec g ++: no matching function to call setValue(const char [10])

une idée sur la façon dont je peux le faire à côté de la création d'un objet chaîne temp?
Il fonctionne, mais je trouve incommode:

string temp("random value"); 
setValue(temp); 
+9

Si vous écrivez 'const string &' au lieu de 'string &', cela fonctionnera grâce au constructeur 'string (const char *)' et à la désintégration du tableau. –

+3

Vraisemblablement 'setValue' prend une référence non-' const' car il veut apporter des changements observables à la chaîne que vous transmettez. Dans ce cas, vous n'avez pas besoin d'une variable 'string' locale dans tous les cas pour voir le changements? –

+0

vous sugestion est la réponse pour moi – Ha11owed

Répondre

6

Le problème est que string& ne se lient pas à des objets temporaires, pour non const nommé objets (non-const lvalues ​​ dans la langue standard). Vous devrez nommer un objet à transmettre à votre fonction, comme vous le faites avec la variable temp. Une solution de contournement consiste à utiliser une référence const à la chaîne et lui transmettre directement votre chaîne de caractères littéral. Cela fonctionne parce que 1) string a un constructeur non-explicite qui accepte const char* 2) const char [10] va se désintégrer à const char*.

11

Modifier votre fonction de prendre une const string &.

+0

Passant une référence temporaire par non-const est certainement pas C++ standard, au moins pas C++ 98. –