0

プログラムで += 演算子をオーバーロードしようとしています。int 次数 (多項式の最高次数) と Node* Poly (ノードへのポインター) を含む多項式クラスで構成されます。

struct Node{ int coefficient;
             Node* next; };

それは私の Node 構造体ですが、Polynomial クラスでオーバーロードしています。

  Polynomial& Polynomial::operator +=(const Polynomial& rP){
    Polynomial copyRP(rP);
    poly->coefficient = poly->coefficient + copyRP.poly->coefficient;
    poly = poly->next; //if I take this and
    copyRP.poly = copyRP.poly->next; //this away, it runs fine
    //with it however the program compiles but doesnt work 
    return *this;
  }

ノードには、係数の逆方向のリストが含まれます (問題がある場合)。たとえば、3x^2+2x+5 は 5->2->3 としてノードに格納され、次数は 2 です。

4

1 に答える 1

0

これを試して:

struct polynomial {
    std::vector< int > coeffs;
    std::size_t degree() const { return coeffs.size(); }
};

polynomial &polynomial::operator+= ( polynomial &lhs, polynomial const &rhs ) {
    if ( lhs.degree() < rhs.degree() ) lhs.coeffs.resize( rhs.degree() );
    for ( std::size_t k = 0; k != rhs.degree(); ++ k ) {
        lhs.coeffs[ k ] += rhs.coeffs[ k ];
    }
    return lhs;
}

リンクされたリストや手動のメモリ管理はありません。別の数値型に簡単に変更できます。

于 2012-12-01T07:53:10.820 に答える