Перегрузка оператора друга C ++ cin >> - PullRequest
0 голосов
/ 06 мая 2020

Я заменяю функцию чтения другом оператором. У меня возникают проблемы со ссылкой на оператор друга в функции void. Я получаю сообщение об ошибке «Нет члена с именем« Прочитано »в дате» в функции void GetDates. Кто-нибудь знает, как это исправить? Спасибо!

Вопрос 2: Сейчас я использую оператор cout <<, но получаю ошибки для своих переменных: «mn - закрытый член Date» </p>

class Date {
private:
    int mn;        //month component of a date
    int dy;        //day component of a date
    int yr;        //year comonent of a date

public:
    //constructors
    Date() : mn(0), dy(0), yr(0)
    {}
    Date(int m, int d, int y) : mn(m), dy(d), yr(y)
    {}

    //input/output functions
    friend istream& operator>>(istream& Read, Date& d);   //overload friend Read
    friend ostream& operator<<(istream& write, Date& d);   //overload friend write                                  
    void GetDates();
    void Sort();
};

//Date class member functions

istream& operator >>(istream& Read, Date& d) //**NEED TO REPLACE with overload vs as friends to Date function**
{
    char skip_char;

    Read >> d.mn >> skip_char >> d.dy >> skip_char >> d.yr;
    return Read;
}


void GetDates(Date l[], int &n)      //reads list l, and returns count in n
   {

       cout << "How many date values are to be processed (1 - 100)? ";
       cin >> n;

       while ((n < 0) || (n > 100)) {
           cout << "Invalid value; enter number between 0 and 100: ";
           cin >> n;
       }

       for (int i = 0; i < n; i++) {
           cout << "Enter a date (mm/dd/yyyy): ";
           l[i].Read(); //ERROR HERE
       }
   }



ostream& operator <<(ostream& write, Date& d) //friend write
{
    if (d.mn < 10)
        cout << '0';
    cout << d.mn << '/';
    if (d.dy < 10)
        cout << '0';
    cout << d.dy << '/';
    if (d.yr < 1000)
        cout << '0';
    if (d.yr < 100)
        cout << '0';
    if (d.yr < 10)
        cout << '0';
    cout << d.yr;
    return write;
}

1 Ответ

2 голосов
/ 06 мая 2020

Read - это имя stream, из которого вы производите извлечение. Пример потока, из которого вы можете читать, - cin. Вам необходимо заменить эту строку:

l[i].Read(); //ERROR HERE

на

cin >> l[i];

Внутри operator>> объект cin теперь называется Read.

Проблема с вашим operator<< заключается в том, что он должен быть объявлен как friend, так же, как вы сделали с operator>>.

Кроме того, вы пишете на cout вместо того, чтобы писать write. Это не сработает, как только вы попытаетесь записать в любой другой поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...