81

Je sais que c'est un problème courant, mais à la recherche de références et d'autres documents, je ne trouve pas de réponse claire à cette question.La concaténation des chaînes ne fonctionne pas comme prévu

Consultez le code suivant:

#include <string> 

// ... 
// in a method 
std::string a = "Hello "; 
std::string b = "World"; 
std::string c = a + b; 

Le compilateur me dit qu'il ne peut pas trouver un opérateur surchargé pour char[dim].

Est-ce que cela signifie que dans la chaîne il n'y a pas d'opérateur +?

Mais dans plusieurs exemples, il y a une situation comme celle-ci. Si ce n'est pas la bonne façon de concaténer plus de chaînes, quelle est la meilleure façon?

+15

Votre code devrait compiler très bien, ce qui signifie que vous n'êtes pas montrant le code exact qui provoque l'erreur (en plus de ne pas afficher le message d'erreur exact). – sbi

+0

Eh bien ça ne marche pas ... Probablement ma faute est que je n'ai pas fourni de compilateur ... c'est g ++ pas vc ... :) – Andry

Répondre

150

Votre code, comme écrit, fonctionne. Vous êtes probablement essayer de réaliser quelque chose sans rapport avec, mais similaire:

std::string c = "hello" + "world"; 

Cela ne fonctionne pas parce que C++ cela semble que vous essayez d'ajouter deux char pointeurs. Au lieu de cela, besoin de pour convertir au moins un des littéraux char* en std::string. Ou vous pouvez faire ce que vous avez déjà la question a écrit dans (comme je le disais, ce code sera travail) ou vous procédez comme suit:

std::string c = std::string("hello") + "world"; 
+0

Oui, je vais l'essayer maintenant ... – Andry

+0

Merci beaucoup ... ok ça marche ... Je m'attendais à ce que c'était le problème ... mais vraiment .... Il n'y a pas un opérateur bien fourni pour concat deux cordes (je veux dire deux char *) ????? c'est vraiment étrange ... Y a-t-il une raison pour laquelle les bibliothèques standard ne supportent pas une chose aussi simple (je suppose qu'il doit y en avoir une). – Andry

+3

char * est un pointeur, et ne peut pas être ajouté simplement parce qu'il nécessite une allocation de mémoire. Les chaînes std :: hide masquent l'allocation, c'est pourquoi il est possible de leur fournir un opérateur +. –

46
std::string a = "Hello "; 
a += "World"; 
+2

Serait +1 si j'avais des upvotes à gauche! – jwueller

+0

Désolé son C++ pas C# i + = ne fonctionne pas ici, pour lequel il est utilisé – Pratik

+17

@Pratik [Vous êtes sûr?] (Http://fr.cppreference.com/w/cpp/string/basic_string/operator%2B % 3D) – Fraser

5

je ferais ceci:

std::string a("Hello "); 
std::string b("World"); 
std::string c = a + b; 

qui compile dans VS2008.

+0

Désolé ... Je ue g ++ non vc ... – Andry

+1

Devrait également travailler dans gcc. –

5
std::string a = "Hello "; 
std::string b = "World "; 
std::string c = a; 
c.append(b); 
Questions connexes