如何重载运算符<<显示我的清单

时间:2018-06-10 15:52:46

标签: c++ list

我一直试图为我的列表重载<<运算符,但我无法输出它。我有以下错误,我不知道如何解决它:

  

错误:'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();但它仍然无效。我不知道该怎么做。

我认为问题出在<<运算符上,但我不知道如何修复它。

1 个答案:

答案 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)