c++ - 没有匹配的函数调用错误

标签 c++ operator-overloading friend-function

我正在尝试重载我的 << 运算符,但我想使用辅助函数,因为我正在处理一棵树,这样我的辅助函数 fn.可以递归。但是,当我尝试从运算符函数调用帮助器时,我收到了这个没有匹配函数调用的错误。

std::ostream& operator<<(std::ostream& out, const Polynomial &rhs)
{
    Polynomial::Node *p = rhs.root;
    rhs.printPoly(p, out);
    return out;
}


void Polynomial::printPoly(Node* p, std::ostream &out)
{
    if(p == nullptr)
        return;
    printPoly(p->left, out);
    out << p->item->coeff() << "x^" << p->item->x();
    printPoly(p->right, out);
}

在.h文件中

friend std::ostream& operator<<(std::ostream& out, const Polynomial& rhs);

哦,这是错误:

没有用于调用“Polynomial::printPoly(Polynomial::Node*&, std::ostream&) const”的匹配函数

最佳答案

const 添加到函数声明的末尾:

void Polynomial::printPoly(Node* p, std::ostream &out) const
{
    ...
}

这个额外的 const 告诉编译器您不会修改 printPoly 方法中的 Polynomial 对象。

关于c++ - 没有匹配的函数调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035447/

相关文章:

c++ - std::mutex 和 std::shared_mutex 的区别

c++ - 读取时文件被删除并重新创建。如何处理?

c++ - 类破坏时的内存损坏(双重释放)

c++ - 如何通过重载 << 运算符打印出 vector 中的对象?

c++ - 这可以在不使用 friend 的情况下完成吗?

c++ - 命名空间内具有函数的循环包含

c++ - 在完全专用的模板函数中实例化一个类的对象

c++ - boost 构建 : Use a feature or a variable

c++ - 重载运算符 <

c++ - 智能指针能否有选择地隐藏或重定向函数调用到它们正在包装的对象?