2012-01-29 76 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; 
    } 

該消息是

敵不過「操作< <」在「的std :: COUT < < ITER .__ gnu_cxx :: __ normal_iterator < _Iterator,_container> ::運算符*與_Iterator =常數節點*,_container =標準::矢量>」

更換當爲升與

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

一切正常。

你有什麼問題可能是什麼問題?所使用的類「節點」重載通過

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

你怎麼重載''<<運營商爲'Node'類型? – kennytm 2012-01-29 16:13:28

+2

你會發布一些真實的代碼嗎? – 2012-01-29 16:14:43

+0

'不管我要使用什麼模板目標'錯誤 – 2012-01-29 16:16:50

回答

4

的「< <」運營商你operator<<未能採取一個參考const的第二個參數:

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

這意味着臨時*iter不能綁定到這個參數。


養成使用const你不需要修改對象的任何地方的習慣:

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

現在,引用參數可以綁定到暫時的。好哇!


這次成功的猜測給您帶來由藍色和數量42

+0

謝謝你的解釋! – muffel 2012-01-29 16:33:01