难以使我的插入操作员过头

Having trouble getting my overloaded insertion operator to work

本文关键字:操作员 插入 我的      更新时间:2023-10-16

这是我的主要功能

int main()
{
    const string filename = "ass10data.txt";   // use your filename here
    ifstream fin(filename.c_str());
    if (!fin)
    {
        cerr << "Unable to open " << filename << endl;
        exit(1);
    }
    string buffer;
    Quadrilateral* ptrQuad;
    while (getline(fin,buffer))
    {
        // Process only valid input
        if (buffer.size() > 1)
        {
            ptrQuad = createQuadrilateralFromString(buffer);
            cout << *ptrQuad << endl;
            delete ptrQuad;
        }
    }
    fin.close();
}

这是超载插入操作员

ostream& operator<<(ostream&out, Quadrilateral *pointerQuad)
{
    if (pointerQuad->getType() == "rectangle")
    {
        out << "Rectangle: sides " << pointerQuad->getFirst() << " and " << pointerQuad->getSecond() << " area=" << pointerQuad->area();
        out << " perimeter=" << pointerQuad->perimeter();
        return out;
    }
    else if(pointerQuad->getType() == "square")
    {
        out << "Square: side "<< pointerQuad->getFirst() << " area="<< pointerQuad->area();
        out << " perimeter=" << pointerQuad->perimeter();
        return out;
    }
    else if(pointerQuad->getType() == "parallelogram")
    {
        out << "Parallelogram: sides " << pointerQuad->getFirst() << " and " << pointerQuad->getSecond() << " area=" << pointerQuad->area();
        out << " perimeter=" << pointerQuad->perimeter();
        return out;
    }
    else if(pointerQuad->getType() == "rhombus")
    {
        out << "Rhombus: side "<< pointerQuad->getFirst() << " area="<< pointerQuad->area();
        out << " perimeter=" << pointerQuad->perimeter();
        return out;
    }
    else
        return out;
}

我收到一条错误消息,说"操作员&lt;&lt;'没有匹配(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'quadrielalal'(",我不知道为什么。

插入操作员应将const引用到Quadrilateral,而不是指向它的指针:

ostream& operator<<(ostream&out, Quadrilateral const &pointerQuad)

当然,这意味着您的函数应该使用值语法,而不是指针。

if (pointerQuad.getType() == "rectangle")
{
    out << "Rectangle: sides " << pointerQuad.getFirst() << " and " << pointerQuad.getSecond() << " area=" << pointerQuad.area();
    out << " perimeter=" << pointerQuad.perimeter();
    return out;
}
[...]