c ++ fout: (privégegevenslid) is niet binnen deze scope gedeclareerd

Stel dat ik een klas heb zoals:

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");
}

In mijn mening zou dit moeten werken omdat ik de waarde van een privégegevenslid van de klasse Ingredient in een vriendenfunctie instel en de vriendenfunctie toegang moet hebben tot alle privégegevensleden, toch?

Maar ik krijg de volgende foutmelding: 'myIng' is niet binnen dit bereik aangegeven Enig idee waarom dit gebeurt?

2

2 antwoord

Omdat u expliciet moet zijn dat u toegang hebt tot een lid van de parameter doel , niet een lokale of globale variabele:

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

Het bovenstaande werkt precies omdat de operator een vriend is van ingrediënt zoals u noemt. Probeer de vriendschap te verwijderen en je zult zien dat toegang tot private leden niet langer mogelijk is.

Ook, zoals Joe opmerkt: streamoperators moeten hun streamparameter retourneren zodat je ze kunt ketenen.

6
toegevoegd
En vergeet niet om in te retourneren.
toegevoegd de auteur Joe, de bron
@Jon: opps ... bedankt dat je dat hebt begrepen!
toegevoegd de auteur user637965, de bron

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
toegevoegd