81

Sé que es un problema común, pero al buscar referencias y otro material no encuentro una respuesta clara a esta pregunta.Cadenas de concatenación no funciona como se esperaba

Considere el siguiente código:

#include <string> 

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

El compilador me dice que no puede encontrar un operador sobrecargado para char[dim].

¿Significa que en la cadena no hay un operador +?

Pero en varios ejemplos hay una situación como esta. Si esta no es la forma correcta de concaturar más cadenas, ¿cuál es la mejor manera?

+15

el código debe compilar bien, lo que significa que no está mostrando el código exacto que causa el error (además de no publicar el mensaje de error exacto). – sbi

+0

Bueno, no funciona ... Probablemente mi culpa es que no proporcioné el compilador ... es g ++ no vc ... :) – Andry

Respuesta

150

Su código, tal como está escrito, funciona. Probablemente usted está tratando de lograr algo no relacionado, pero similar:

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

Esto no funciona porque para C++ esto parece que está tratando de añadir dos char punteros. En cambio, usted necesita para convertir al menos uno de los literales char* a std::string. O se puede hacer lo que ya se haya publicado en la pregunta (como ya he dicho, este código se trabajo) o de hacer lo siguiente:

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

Sí, lo intentaré ahora ... – Andry

+0

Muchas gracias ... vale, funciona ... esperaba que este fuera el problema ... pero en realidad ... No hay un operador bien provisto para concat dos cuerdas (me refiero a dos char *) ????? esto es realmente extraño ... ¿Hay alguna razón por la cual las bibliotecas estándar no admiten algo tan simple (supongo que debe haber una)? – Andry

+3

char * es un puntero y no se puede agregar simplemente porque requiere una asignación de memoria. std :: strings oculta la asignación, es por eso que es posible proporcionar un operador + para ellos. –

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

¡Sería +1 si me quedaran votaciones ascendentes! – jwueller

+0

Disculpe que C++ no C# i + = no funciona aquí, para lo cual se usa – Pratik

+17

@Pratik [¿Está seguro?] (Http://en.cppreference.com/w/cpp/string/basic_string/operator%2B % 3D) – Fraser

5

Me gustaría hacer esto:

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

que compila en VS2008.

+0

Lo siento ... I gue no vc ... – Andry

+1

También debería funcionar en gcc. –

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