无法直接输出STL Vector的迭代器值

时间:2012-01-29 16:11:03

标签: c++ stl

尝试在C ++中输出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;
    }

消息是

  

与'operator&lt;&lt;'不匹配在'std :: cout&lt;&lt; iter .__ gnu_cxx :: __ normal_iterator&lt; _Iterator,_Container&gt; :: operator * with _Iterator = const Node *,_ Container = std :: vector&gt;'

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

一切正常。

你有什么问题吗?使用的类“Node”重载“&lt;&lt;”运营商

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

1 个答案:

答案 0 :(得分:4)

您的operator<<未能引用const作为第二个参数:

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

这意味着临时 *iter无法绑定到该参数。


养成使用const任何不需要修改对象的地方的习惯:

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

现在,引用参数可以绑定到临时参数。好哇!


这个成功的猜测是由蓝色和数字42带给你的。