尝试在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;
}
答案 0 :(得分:4)
您的operator<<
未能引用const
作为第二个参数:
std::ostream& operator<<(std::ostream& os, MyType& obj);
这意味着临时 *iter
无法绑定到该参数。
养成使用const
任何不需要修改对象的地方的习惯:
std::ostream& operator<<(std::ostream& os, MyType const& obj);
现在,引用参数可以绑定到临时参数。好哇!
这个成功的猜测是由蓝色和数字42带给你的。