【问题标题】:no matching function call error没有匹配的函数调用错误
【发布时间】:2013-11-17 20:01:30
【问题描述】:

我正在尝试重载我的

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);

哦,这是错误:

no matching function for call to 'Polynomial::printPoly(Polynomial::Node*&amp;, std::ostream&amp;) const'

【问题讨论】:

    标签: c++ operator-overloading friend-function


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是我尝试的第一件事,它还在对我大喊大叫。我会再试一次。
    • @ScubaSteve 对不起,我打错了。刚刚更新了我的帖子...再试一次。
    • 啊,感谢它现在的工作。我比我更喜欢这个解决方案。
    【解决方案2】:

    啊,我刚刚在 Polynomial &rhs 的声明中去掉了 const,看起来很开心。

    【讨论】:

    • 您实际上想要const,因为您没有修改函数中的对象。在适当的地方添加 const 限定符有助于避免不希望的副作用并有助于编译器优化。
    猜你喜欢
    • 2013-05-05
    • 2012-12-28
    • 2015-03-31
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多