c++operator-overloadingfriend-functionlocal-class

How to define a friend function operator>> inside a local class?


Trying to overload input operator >> inside a local class. I tried to define friend istream &operator >> inside class Data.

int readFile(char* file_name,float temperature_data[][31])
{
    class Data
    {
        public:
            int day,month,year;
            float temp;
            friend istream & operator >> (istream &in,  Data &c)
            {
                char ch;
                in >> c.day;
                in >>  ch;
                in >> c.month;
                in >>  ch;
                in >> c.year;
                in >>  ch;
                in >> c.temp;
                return in;
            }
    };
    freopen(file_name,"r",stdin);
    int i;
    Data d;
    for(i=0;;i++)
    {
        int total=0;
        char ch;
        cin>>d;
        temperature_data[d.month-1][d.day-1] = d.temp;
        ch = getchar();
        if(ch==EOF)
            break;
    }
    fclose(stdin);
    return d.year;
}

It's showing error:

error: can't define friend function 'operator>>' in a local class definition

Solution

  • Here's what I'm thinking, from my comment, which you'd call with d.read(cin):

    class Data {
    public:
      int day,month,year;
      float temp;
      void read(istream& in) {
        char ch;
        in >> day;
        in >> ch;
        in >> month;
        in >> ch;
        in >> year;
        in >> ch;
        in >> temp;
      }
    };