0

constオブジェクトの演算子<<のオーバーロードに問題があります。問題を見つけることができませんでした

#include <iostream>
using namespace std;
class T
{
    friend ostream& operator<<(ostream& os,T& t)
    {
        os << "Val : " << t.value << endl;
        return os;
    }
private:
    int value;
public:
    T(int v) { value=v; }
    int getValue() const { return value; }
};

int main()
{
    const T t(2);
    cout << t;
    return 0;
}

コンパイラメッセージ:

エラーC2679:バイナリ'<<':タイプ'const T'の右側のオペランドをとる演算子が見つかりません(または受け入れ可能な変換がありません)

4

4 に答える 4

2

オブジェクトを次のように宣言しているためoperator<<()、オブジェクトを操作できませんconst

friend ostream& operator<<(ostream& os,T& t)

constオブジェクトで使用できるようにすることをコンパイラーに通知する必要があります。

friend ostream& operator<<(ostream& os, const T& t)
于 2013-03-12T16:52:41.247 に答える
1

あなたoperator<<は通常、const参照によってその議論をする必要があります:

friend ostream& operator<<(ostream& os, const T& t)

非参照はオブジェクトconstにバインドできません。constこれは理にかなっています。そうでない場合はconst、参照を介してオブジェクトを変更できます。

于 2013-03-12T16:52:43.323 に答える
0

次の行T&const参照を作成します。

friend ostream& operator<<(ostream& os,T& t)

したがって、次のようになります。

friend ostream& operator<<(ostream& os,const T& t)

または、:を取り除き&ます

friend ostream& operator<<(ostream& os,T t)

どちらも、コードで次の結果をもたらします。

Val : 2

コンソールで。

于 2013-03-12T16:52:01.593 に答える
0

constを追加するだけで、機能するはずです:

friend ostream& operator<<(ostream& os,const T& t)

于 2013-03-12T16:53:32.113 に答える