1

警告はostream & operator<<(ostream &os, A &A0)関数によって生成されています。

クラスの定義方法は次のとおりです。

class A
{
    public:
        friend ostream & operator<<(ostream &os, A &A0);
        A& operator=(string strSlot_);
        A& operator+(string strSlot_);
        A& operator+(const A &B);
        A& operator=(const A &B);
        string slotReturn();
        A(string strSlot_);
        A(const A &object);
        void slotChange();
        void sCout();
        ~A();
        A();
    private:
        string strSlot;
        int n;
};


ostream & operator<<(ostream &os, A &A0)
{
    os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

string A::slotReturn()
{
    return strSlot;
}

問題は、何が返ってくるのかということです。*this動作していないようです(friend?なので)。(これは単なる警告ですが、それでも知りたいだけです。)

また、なぜA &A0constとして渡すことができないのですか(この場合、エラーは「'std :: string A :: slotReturn()'の'this'引数として'const A'を渡すと、修飾子が破棄されます」)?

4

1 に答える 1

5

あなたは自分自身を返す必要がありstd::ostream&ます:

ostream & operator<<(ostream &os, A &A0)
{
   return  os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

余談ですが、用語は少しずれています。「友達クラス」はありません。ここstd::ostream& operator<<の友達です。ただし、のパブリックメンバー関数を呼び出すだけなので、友達である必要はありませんA。したがって、フレンド宣言を削除できます。

おそらく、次のメソッドも作成する必要がありますslotReturn()const

string slotReturn() const;
        //            ^ const method

を変更しostream& operator<<て、const参照を取得します。

ostream & operator<<(ostream& os, const A& A0) { .... }

これにより、一時的なものを印刷できます。

std::cout << A("I am a temporary!") << "\n"; 
于 2012-11-22T16:20:59.187 に答える