81

일반적인 문제이지만 참조 자료 및 기타 자료를 찾고 있는데이 질문에 대한 명확한 답을 찾을 수 없습니다. 컴파일러는 나에게 말한다문자열 연결이 예상대로 작동하지 않습니다.

#include <string> 

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

그것이 char[dim]에 대한 오버로드 된 연산자를 찾을 수 없습니다 :

는 다음과 같은 코드를 생각해 보자.

문자열에 + 연산자가 없다는 것을 의미합니까?

그러나 몇 가지 예에서 이와 같은 상황이 있습니다. 이것이 더 많은 문자열을 연결하는 올바른 방법이 아니라면 가장 좋은 방법은 무엇입니까?

+15

귀하의 코드는 당신이하지 않은 것을 의미한다, 잘 컴파일한다 정확한 오류 메시지를 게시하지 않고 오류를 일으키는 정확한 코드를 표시합니다. – sbi

+0

글쎄 그것은 작동하지 않습니다 ... 아마도 내 잘못은 내가 컴파일러를 제공하지 않았다는 것입니다 ... 그것은 g ++ ++가 아니라 ... :) – Andry

답변

150

작성된 코드는 작동합니다. 당신은 아마 관련이없는 뭔가를 달성하기 위해 노력하고 있지만, 비슷한 위치 : 두 char 포인터를 추가하려는처럼

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

이 C에 대한 때문에 작동하지 않습니다이 ++이 보인다. 대신 char* 리터럴 중 하나 이상을 std::string으로 변환하려면이 필요합니다. 어느 쪽이든 당신은 (내가 말했듯이,이 코드 것이다 일을) 이미 질문을 게시 한 일을하거나 다음을 수행하십시오

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

네, 지금 시도해 보겠습니다 ... – Andry

+0

대단히 고마워요 ... 괜찮습니다 ... 나는 이것이 문제라고 예상 했었지만 실제로는 .... 잘 준비된 연산자가 없습니다. 두 개의 문자열 (나는 두 개의 char *를 의미한다) ????? 이것은 정말로 이상합니다 ... 표준 라이브러리가 그러한 단순한 것을 지원하지 않는 이유가 있습니까? (필자는 반드시 있어야한다고 생각합니다). – Andry

+3

char *는 포인터이며 단순히 메모리 할당이 필요하기 때문에 추가 할 수 없습니다. std :: strings는 할당을 숨기므로 연산자 +를 제공 할 수 있습니다. –

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

만약 내가 upvotes 왼쪽했다 +1 될까요! – jwueller

+0

죄송합니다 C++이 아니라 C# i + = 여기서는 작동하지 않습니다. – Pratik

+17

@Pratik [확실합니까?] (http://en.cppreference.com/w/cpp/string/basic_string/operator%2B % 3D) – Fraser

5

내가 이런 짓을 했을까 : VS2008에서 컴파일

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

합니다.

+0

죄송합니다 ... 저는 g ++이 없습니다 ... – Andry

+1

gcc에서도 작동해야합니다. –

5
std::string a = "Hello "; 
std::string b = "World "; 
std::string c = a; 
c.append(b); 
관련 문제