0

C++ で + 演算子をオーバーロードしようとしていますが、次のエラーが発生します。

演算子.cpp: 関数 'int main()':
演算子.cpp: 23:17: エラー: 初期化で '演算子' を 'int' に変換できません

これは私のコードです:

#include <iostream>
using namespace std;

class Operators{
    private:
        int num1;

    public:
        Operators(int num1){
            this->num1 = num1;
        }
        Operators operator+(Operators o){
            return Operators(num1 + o.num1);
        }
};

int main(){
    Operators o1(5);
    Operators o2(10);
    Operators res = o1 + o2; // EDITED

    cout << res;
}

手伝っていただけませんか?

私が言うことができるように、この場合、オーバーロードすることは意味がありません5+10が、私はただ実験しています.

更新 ありがとう、私は編集しましたint
しかし、今では次のエラーが発生しています。

operator.cpp: 関数 'int main()' 内:
演算子.cpp: 25:10: エラー: 'std::cout << res'<br> 内の 'operator<<' に一致 [...]

4

5 に答える 5

4

この行の問題:

int res = o1 + o2;

のオーバーロードがoperator +type のオブジェクトを返すということですかOperators。これは、 (の一時的な型( の結果) からint(を初期化しようとしているが、それを行うためのユーザー定義の変換がないことを意味します。res)Operatorso1 + o2

これが、コンパイラがエラーを発行する理由です。Operatorsクラスに変換演算子を追加することで、これを簡単に修正できます。

operator int () const { return num1; }

アップデート:

質問を更新したようです。以下の 2 行目に問題があります。

Operators res = o1 + o2;
cout << res;

operator <<クラスに のオーバーロードを定義しない限り、コンパイラはtype のオブジェクトをストリーミングするためにOperatorsどのオーバーロードを選択するかを認識しません。operator <<Operators

この問題を解決するには、次のことができます。

  • int上記のように、変換演算子を に定義します
  • operator <<次のように、 forのオーバーロードを定義Operatorsします。

    friend std::ostream& operator << (std::ostream& o, Operators const& op)
    {
        o << op.num1;
        return o;
    }
    

これが実際のです。

于 2013-04-21T17:01:59.487 に答える
3

エラーメッセージが伝えようとしているように、o1 + o2タイプはOperatorsです。
それをに割り当てることはできませんint

于 2013-04-21T17:02:07.130 に答える
1

あなたはオブジェクトをoperator+返しOperatorsます。次に、この結果を に割り当ててみint resます。Operatorsオブジェクトからに変換する方法がありませんint。これを行うには、変換演算子を指定できます。

operator int() {
  return num1;
}

Operatorsこれは からへの変換を定義しintます。

于 2013-04-21T17:02:17.847 に答える
0

に変更intOperators、独自のコピーおよびデフォルト コンストラクターを実装します。

#include <iostream>

class Operators
{
    private:
        int num1;

    public:
        Operators() = default;
        Operators(Operators const& op) : num1(op.num1) {}
        Operators(int num1)
        {
            this->num1 = num1;
        }
        Operators operator+(Operators o)
        {
            return num1 + o.num1;
        }
};

int main()
{
    Operators o1(5);
    Operators o2(10), res;

    res = o1 + o2;

    std::cout << res;
}

これをさらに機能させるには、オーバーロードを作成しoperator<<て合計を出力します。

于 2013-04-21T17:03:38.197 に答える
0

あなたは書く必要があります:

int res = o1.getMethod() + o2.getMethod();

getMethod() は、プライベート整数 num1 を返すクラスのパブリック メソッドです。そうしないと、アクセスできません。それを試してみてください。

于 2013-04-21T17:09:32.400 に答える