0

<< 演算子をオーバーロードしようとしていますが、ツリーで作業しているためヘルパー関数を使用したいので、ヘルパー 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);

ああ、ここにエラーがあります:

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

4

2 に答える 2

2

関数宣言の最後に追加constします。

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

このエクストラは、メソッド内のオブジェクトをconst変更しないことをコンパイラに伝えます。PolynomialprintPoly

于 2013-11-17T20:03:28.327 に答える
0

ああ、Polynomial &rhs の宣言で const を捨てたところです。満足しているようです。

于 2013-11-17T20:03:35.703 に答える