C++ erreur d'expression doit avoir intégré ou d'un type enum — obtenir ce à partir d'une chaîne avec concaténation?
C++ erreur expression doit avoir intégré ou d'un type enum obtenir ce à partir d'une chaîne avec concaténation?
Donc dans le toString()
d'une classe en C++ j'ai le code:
string bags = "Check in " + getBags() + " bags";
Je pensais que je pouvais déclarer une chaîne comme celle-ci? (Je suis issu d'une Java de fond et essayer d'apprendre le C++). Le bags
est souligné dans Visual Studio et le problème est:
expression doit avoir intégré ou d'un type enum.
getBags()
retourne juste un int
.
Un autre exemple où cela se produit est:
string totalPrice = "Grand Total: " + getTotalPrice();
getTotalPrice()
renvoie une float
et c'est ce qui est souligné avec l'erreur.
Mais alors, si je l'ai mis dans une ligne comme:
string blah = getBags() + "blah";
Pas d'erreurs.
Ce que je ne suis pas à comprendre ici?
OriginalL'auteur SuperCow | 2014-03-31
Vous devez vous connecter pour publier un commentaire.
"Check in "
est en fait unconst char *
.L'ajout de
getBags()
(unint
) il donne un autreconst char*
. L'erreur de compilation est générée, car vous ne pouvez pas ajouter deux pointeurs.Vous avez besoin de les convertir à la fois
"Check in "
etgetBags()
à cordes avant de la concaténation:" bags"
sera convertie implicitement enstring
.- On savoir quel version de Visual Studio prend en charge le C++11?
vs11 ou vs12. Je ne suis pas sûr.
est-il nécessaire d'avoir std::string() autour de "Check in "? Ne sera pas présente également être implicitement converti en une chaîne de caractères?
Oui,
"Check in "
sera implicitement converti enstd::string
, de sorte que la conversion explicite n'est pas nécessaire.OriginalL'auteur Ferruccio
lors de l'utilisation de + pour ajouter des chaînes le premier élément doit avoir de l'opérateur+, const char* ne l'a pas.
par conséquent, vous devriez faire une chaîne à partir de:
ou de le faire dans les étapes de:
EDIT:
Plus de problème, c'est l'int retourné à partir de la méthode, pour une raison quelconque, la chaîne n'a pas l'opérateur+ pour int.
Afin de mieux vous utiliser stringstream comme ceci:
OriginalL'auteur SHR
Essayer
std::to_string(getBags())
. Vous ne pouvez concaténer des chaînes de chaînes.Vous n'avez pas à créer votre propre fonction std::to_string() est une partie de la <string> de la bibliothèque. Source.
Vous pouvez utiliser std::to_string uniquement si vous utilisez le c++11
Je suppose que plus de solution générale est mieux, mais il a dit qu'il est à l'aide de Visual Studio, qui a eu le support de C++11 depuis 2010.
OriginalL'auteur Lee Thomas