2012-01-29 4 views
-1

C++에서 STL 반복자 값을 출력하려고 할 때 문제가 있습니다. 다음 코드는 오류가 발생하지 않습니다 -에 상관없이 내가 사용하는거야 어떤 템플릿 대상 :STL 벡터의 반복자 값을 직접 출력 할 수 없습니다.

template <typename T> 
void outputVector(vector<T> &v) 
{ 
    typename vector<T>::const_iterator iter; 
    for(iter = v.begin(); iter != v.end(); iter++) 
    { 
     cout << *iter << endl; 
    } 

메시지는 '연산자 < <'에 대한 일치

없는 표준 '에 :: < COUT < ITER .__ gnu_cxx :: __ normal_iterator < _Iterator, _Container> :: = CONST _Iterator 노드 * _Container = 표준 : 벡터 연산자 *는> '

가 교체 할 때를위한 L oop with

for(iter = v.begin(); iter != v.end(); iter++) 
{ 
    T t = *iter; 
    cout << t << endl; 
} 

모든 것이 잘 작동합니다.

문제의 증상이 있습니까? 사용 된 클래스 "노드는"operator<< 두 번째 인수에 대해 const에 대한 참조를 가지고하지 귀하의

ostream & operator<<(ostream &o, Node &n) 
{ 
o << "Hello World" << endl; 
return o; 
} 
+0

에 의해 당신에게 가져? – kennytm

+2

실제 코드를 게시 하시겠습니까? –

+0

'어떤 템플릿 타겟이든 상관없이 내가 사용하려고합니다. ' –

답변

4

으로 "< <"연산자 오버로드 :

std::ostream& operator<<(std::ostream& os, MyType& obj); 

이는 일시적으로*iter 의미를 할 수 없습니다 그 주장에 묶어 라.


const 객체를 수정할 필요가 없습니다 어떤 장소를 사용하는 습관을 가져 오기 :

std::ostream& operator<<(std::ostream& os, MyType const& obj); 

지금, 참조 인수는 임시로 바인딩 할 수 있습니다. 후자!


이 성공적으로 생각 엔 당신이`Node` 유형에 대한 '<<'연산자를 오버로드 어떻게 블루 색상과 수 (42)

+0

그 설명에 감사드립니다! – muffel