2009-08-19 2 views
1

std::istream에서 operator>>을 사용하여 읽는 방법은 무엇입니까?std :: istream (연산자 >> 사용)에서 어떻게 읽습니까?

void foo(const std::istream& in) { 
    std::string tmp; 
    while(in >> tmp) { 
    std::cout << tmp; 
    } 
} 

하지만 오류를 제공합니다 :

error: no match for 'operator>>' in 'in >> tmp' 
+0

IStream을가 시작을위한 const를하지 않아야합니다. istream 객체의 상태는 데이터를 꺼내서 변경해야합니다. –

답변

9

연산자 >>는 스트림을 수정하므로 const 만 전달하면 안됩니다.

+0

감사합니다. 놀랍게도 스트림에서 읽기는 그것을 수정해야하지만 아마도 위치 포인터는 읽음으로써 향상 될 것입니다. – Frank

+2

놀라운 일이 아닙니다. 인스 트림을 읽으면 나중에 동일한 스트림에서 읽는 내용이 변경됩니다. 이는 관찰 가능한 외부 효과이므로 위치 포인터의 내부 구현 세부 정보와 상관없이 개체를 수정하는 것으로 간주해야합니다. –

1

당신은 올바른 방법으로하는 것이하고있는

나는 다음 시도했다. 필요한 헤더를 모두 포함 했습니까? ( <string><iostream>)?

+0

예, 이 포함되어 있습니다. – Frank

+0

유진이 맞습니다. const 참조를 알지 못했습니다. 이 특정 오류로 불평하는 이유는 const 스트림을 사용하는 연산자 >> 버전이 없기 때문입니다. –

3

비 const를 참조 사용

void foo(std::istream& in) { 
    std::string tmp; 
    while(in >> tmp) { 
    std::cout << tmp; 
    } 
} 
관련 문제