2017-11-19 2 views
0

Es wird versucht, den Eingabeoperator >> innerhalb einer lokalen Klasse zu überlasten. Ich habe versucht, friend istream &operator >> innerhalb class Data zu definieren.Wie definiert man einen Freund Funktionsoperator >> innerhalb einer lokalen Klasse?

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

Es zeigt Fehler:

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

Eine Funktion kann in eine definiert werden Friend-Deklaration einer Klasse, wenn und nur wenn die Klasse eine nicht-lokale Klasse ist (9.8), der Funktionsname ist nicht qualifiziert und die Funktion hat einen Namespace-Bereich. – JLev

+0

Gibt es eine Problemumgehung? Ich versuche den >> Operator für die Eingabe zu überladen. Ich muss dies innerhalb der Funktion readFile tun. Danke –

+0

Die Problemumgehung besteht darin, nicht 'operator >>' zu verwenden, sondern eine 'read (istream & in)' Methode zu erstellen und sie mit 'd.read (cin)' aufzurufen. – Eljay

Antwort

0

Hier ist, was ich denke, von meinem Kommentar, die Sie mit d.read(cin) nennen würde:

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

Danke..es hat funktioniert. Ist es möglich, den Operator >> zu überladen? –

+0

Nein, laut JLevs Kommentar können Sie das nicht tun, weil Sie eine lokale Klasse haben. – Eljay

Verwandte Themen