1

コンパイルエラーが常に発生しました:

「bObj1 = Balance::operator+(Balance&)(((Balance&)(& bObj2)))」の「operator=」に一致しません</p>

誰かが理由を指摘するのを手伝ってくれませんか? 前もって感謝します。

コード:

class Balance
{
public:
    Balance (int b = 0) {balance = b;};
    Balance (Balance &);

    Balance & operator= (Balance &);
    Balance operator+ (Balance &);

    int get() {return balance;};
    void set(int b) {balance = b;};

private:
    int balance;
};

Balance & Balance::operator=(Balance &copy)
{
    balance = copy.get();
    return *this;
}

Balance Balance::operator+ (Balance &rig)
{
    Balance add;
    add.set(this->get() + rig.get());
    return add;
}

int main()
{
    Balance bObj1, bObj2(100);
    bObj1 = bObj2;
    bObj1 = bObj1 + bObj2; // This line cause the error.
    return 0;
}
4

2 に答える 2

0

非 const 参照で演算子のオーバーライドを使用すると、問題が発生します。関数を const に変更します。

Balance & operator= (const Balance &);
Balance operator+ (const Balance &) const;

int get() const { return balance; }

+演算子が適用されると、結果は不変のrvalueになります=参照を受け入れることができなかったためrvalue(const ではないため)、コンパイラは演算子を照合できませんでした。

上で、私はあなたの関数を右辺値フレンドリーにしました。=オペレーターは右辺値を受け入れます。+演算子は右辺値も受け入れます。constこれは、オブジェクトを変更しないためです。constgetなので関数もconstにしています。

于 2013-09-02T03:16:36.750 に答える