我一直试图为我的列表重载<<
运算符,但我无法输出它。我有以下错误,我不知道如何解决它:
错误:'operator&lt;&lt;'不匹配在'std :: cout&lt;&lt; * it(std :: _ List_const_iterator&lt; _Tp&gt; :: operator * with _Tp = Joc)'
这些是我试图重载<<
运算符的方法,但它们都没有使用迭代器输出我的列表。我不知道如何解决它。
ostream& Joc::afisare(ostream &os) const
{
os << endl;
os << "Numele jocului:" << this->nume << ' ' << "Stoc:" << this->stoc << ' ' << "Descrierea joc: " << this->Descriere << ' ';
for(list<string>::const_iterator it = upd.begin(); it != upd.end(); it++)
{
os << "Lista:" << *it << endl;
}
os << endl;
return os;
}
ostream& operator<<(ostream &os, Joc &j)
{
return j.afisare(os);
}
void Joc::afisare() const
{
cout << "Numele jocului:" << this->nume << ' ' << "Stoc:" << this->stoc << ' ' << "Descrierea joc: " << this->Descriere << ' ';
for(list<string>::const_iterator it = upd.begin(); it != upd.end(); it++)
{
cout << "Lista:" << *it << endl;
}
}
主:
list<Joc> jx;
jx.push_back(j6);
jx.push_back(j7);
for(list<Joc>::const_iterator it = jx.begin(); it != jx.end(); it++)
{
cout << *it;
}
我尝试使用cout << it->afisare();
但它仍然无效。我不知道该怎么做。
我认为问题出在<<
运算符上,但我不知道如何修复它。
答案 0 :(得分:1)
您的主循环使用const_iterator
来迭代jx
的元素。当您取消引用每个迭代器时,您将获得对const Joc
对象的引用。
但是,j
的{{1}}参数未声明为operator<<
,因此编译器无法找到接受const
的{{1}}重载作为输入,因此错误消息。
您需要将operator<<
参数声明为const Joc
:
j
有关详细信息,请参阅operator overloading。
话虽如此,您的const
重载是重复代码而不是共享代码。我建议另一种实现方式:
ostream& operator<<(ostream &os, const Joc &j)