Ошибка 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 в функции friend, а функция friend должна иметь доступ ко всем частным членам данных правильно?

Но я получаю эту ошибку: 'myIng' не был объявлен в этой области Любая идея о том, почему это происходит?

2

2 ответы

Поскольку вам нужно быть явным, что вы обращаетесь к члену параметра target , а не локальной или глобальной переменной:

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

Вышеупомянутое будет работать именно потому, что оператор является friend Ingredient , как вы упоминаете. Попробуйте удалить дружбу, и вы увидите, что доступ к членам private больше невозможен.

Кроме того, как отмечает Joe: операторы потока должны возвращать свой параметр потока, чтобы вы могли их связать.

6
добавлено
И не забудьте вернуть в .
добавлено автор Joe, источник
@Jon: 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
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest