왜 문자열을 줄 수 없습니까?


143

내가 cout string이것을 좋아할 수없는 이유 :

string text ;
text = WordList[i].substr(0,20) ;
cout << "String is  : " << text << endl ;

이 작업을 수행하면 다음 오류가 발생합니다.

오류 2 오류 C2679 : 이진 '<<': 'std :: string'유형의 오른쪽 피연산자가 필요한 연산자를 찾을 수 없습니다 (또는 변환이 허용되지 않음) c : \ users \ mollasadra \ documents \ visual studio 2008 \ 프로젝트 \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

이것조차도 작동하지 않는다는 것은 놀라운 일입니다.

string text ;
text = "hello"  ;
cout << "String is  : " << text << endl ;

오류 메시지에서 편집 할 수 있습니까?
Troyen

1
당신은 했습니까 #include <iostream>?
Konerak

정보가 충분하지 않습니다. 오류는 무엇입니까
alexD

나는 그렇게했다. 그러나 다시, 나는 문제가있다.
Ata

전체 파일을 게시 할 수 있습니까? 우리는 당신이 함수에 이것을 호출하고 있는지, 당신이 옳은 것들 등을 포함 시켰
는지 모른다

답변:


241

당신은 포함해야합니다

#include <string>
#include <iostream>

7
또한 using namespace std또는 using std::cout; using std::endl;
fardjad

2
예, 그러나 string text;편집 (추가 오류)에 오류가 없으므로 문제가 아니라 string헤더 가 누락되었다고 포함되어 있습니다.
Kiril Kirov

57
+1 : Visual C ++의 많은 STL 헤더 (<iostream> std::basic_string포함)는 구현 정의 <xstring> 헤더를 간접적으로 포함하기 때문에 클래스 정의를 가져옵니다 ( 직접 포함하지는 않음 ). 문자열 클래스를 사용할 수는 있지만 관련 operator<<은 <string> 헤더 자체에 정의되므로 수동으로 포함해야합니다. 또한 다른 헤더를 사용 std::basic_string하여 VC ++ 의 작품 정의를 간접적으로 포함 하지만 모든 컴파일러에서 작동하지는 않습니다.
Sven

6
Sven- 귀하의 의견은 훌륭합니다! 이 질문자와 비슷한 문제가 있었고 컴파일러는 std :: cin 및 std :: string 유형에 대해 연산자 >>가 정의되지 않았다고 말했습니다. 내가 <iostream>을 가지고 있지만 <string>을 잊어 버린 것으로 나타났습니다. 나는 std :: string이 정의되지 않았다고 불평했을 gcc w / linux 작업에 익숙하다. 귀하의 의견은 왜 우리가 운영자에 대한 불만을 제기했는지 완벽하게 설명합니다. 감사!!
Daniel Goldfarb

2
작동합니다. 코드에서 #include <string> 줄을 놓쳤습니다. 감사.
Hao Nguyen

11

std어떻게 든 cout의 네임 스페이스를 참조해야합니다 . 예를 들어

using std::cout;
using std::endl;

함수 정의 또는 파일 위에


6

코드에는 몇 가지 문제가 있습니다.

  1. WordList어디에도 정의되어 있지 않습니다. 사용하기 전에 정의해야합니다.
  2. 이런 함수 외부에서 코드를 작성할 수는 없습니다. 함수에 넣어야합니다.
  3. 당신은 필요 #include <string>당신이 사용하기 전에 문자열 클래스와 iostream을 사용하기 전에 coutendl.
  4. string, coutendl에 살고있는 std당신이 그들을 접두사없이 액세스 할 수 있도록, 네임 스페이스 std::는 사용하지 않는 using최초의 범위로 가져에 지시합니다.

그들 중 누구도 나를 위해 일한 적이 없습니다. 문제는 substr에 관한 것 같습니다
Ata

1

위의 답변은 좋지만 문자열 포함을 추가하지 않으려면 다음을 사용할 수 있습니다

ostream& operator<<(ostream& os, string& msg)
{
os<<msg.c_str();

return os;
}

0

c_str ()을 사용하여 std :: string을 const char *로 변환하십시오.

cout << "String is  : " << text.c_str() << endl ;

-1

참조 std::cout하거나 std::endl명시 적으로 언급 할 필요는 없습니다 .
둘 다에 포함되어 있습니다 namespace std. 매번 using namespace std스코프 해상도 연산자를 사용하는 대신 ::더 쉽고 깨끗합니다.

#include<iostream>
#include<string>
using namespace std;

5
StackOverflow에 오신 것을 환영합니다. 눈치 채지 못했을 수도 있지만 이는 허용 된 답변의 의견 중 하나에서 해결되었습니다.
Andon M. Coleman

-3

리눅스 시스템을 사용하는 경우 추가해야합니다

using namespace std;

헤더 아래

윈도우가 그렇다면 헤더를 올바르게 넣으십시오. #include<iostream.h>

#include<string.h>

이것이 완벽하게 작동한다는 것을 참조하십시오.

#include <iostream>
#include <string>

int main ()
{
std::string str="We think in generalities, but we live in details.";
                                       // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (3,5);     // "think"

   std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     
// get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}

using namespace std;대상 운영 체제와 관련이 없습니다 linux. 마찬가지로, 추가 .h받는 포함하는 것을 윈도우 운영 체제 목표와는 아무 상관이없는, #include <iostream>그리고 #include <string>윈도우에서 작동합니다.
StaticBeagle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.