如何在局部类中定义友元函数运算符>>?

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

本文关键字:gt 函数 运算符 友元 定义 局部      更新时间:2023-10-16

试图重载本地类中的输入运算符>>。我试图在class Data内部定义friend istream &operator >>.

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

它显示错误:

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

这是我的想法,来自我的评论,你会用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;
  }
};