C ++エラー:このスコープで(プライベートデータメンバー)が宣言されていません

次のようなクラスがあるとします。

class Ingredient
{
    public:
        friend istream& operator>>(istream& in, Ingredient& target);
        friend ostream& operator<<(ostream& out, Ingredient& data);
    private:
        Measure myMeas;
        MyString myIng;
};

In this overloaded friend function, I'm trying to set the value of myIng

istream& operator>>(istream& in, Ingredient& target)
{
    myIng = MyString("hello");
}

友人の機能でIngredientクラスのプライベートデータメンバーの価値を設定しているので、友人の機能はすべてのプライベートデータメンバーにアクセスできるはずですから、これはうまくいくはずです。

しかし、私はこのエラーが発生します: 'myIng'はこのスコープで宣言されていません なぜこのようなことが起こっているのか?

2

2 答え

ローカル変数またはグローバル変数ではなく、 target パラメータのメンバーにアクセスしていることを明示的に示す必要があるためです。

istream& operator>>(istream& in, Ingredient& target)
{
    target.myIng = MyString("hello");//accessing a member of target!
    return in;//to allow chaining
}

あなたが言及しているように、演算子は Ingredient friend であるため、上記は正確に機能します。友情を削除してみると、 private にアクセスすることはできなくなります。

また、Joeがコメントしているように、ストリーム演算子は、ストリームパラメータを返す必要があります。

6
追加された
そして in を返すことを忘れないでください。
追加された 著者 Joe,
@ジョン:opps ...それをキャッチするために感謝!
追加された 著者 user637965,

In that scope, there is nothing called myIng. The error is pretty clear on that. Its Ingredient& target who has a myIng member, so you should write:

target.myIng = MyString("hello");
2
追加された