operator>> problem



  • ich möchte bestimmte datensätze aus einer txt datei einlesen und bekomme dabei folgende fehlermeldungen:

    error C2601: 'operator >>' : local function definitions are illegal
    this line contains a '{' which has not yet been matched
    error C2601: 'operator <<' : local function definitions are illegal
    this line contains a '{' which has not yet been matched

    txt file:

    Name(string)
    gewicht(int)
    anzahl(int)
    
    Name(string)
    gewicht(int)
    anzahl(int)
    
    usw.
    
    #include "Travel.h"
    
    struct Passenger
    {
        std::string name;
        unsigned int weight;
        unsigned int groupCode;
    	unsigned int id;
    }; 
    
    void Travel::getRequets(){
    	std::ifstream is( "inFile" );
    
        Passenger p;
    
    	inline
    	std::istream& 
    	operator>>(std::istream& is, Passenger& p) {
            Passenger tmp;
            std::getline(is, tmp.name); 
            is >> tmp.weight
               >> tmp.groupCode
               >> std::ws;
            if (is) 
                p = tmp;
            return is;
    		}
    
    	inline
    	std::ostream& 
    	operator<<(std::ostream& os, const Passenger& p) {
    			return os  << p.name << '\n'
    					   << p.weight << '\n'
    					   << p.groupCode << '\n'
    					   << '\n';
    	}
    
    	if ( ! is.eof() )
            std::cerr << "File/Format Error";
    
    }
    


  • Die Fehlermeldung sagt eigentlich recht genau was falsch ist..



  • ich bin noch c++ anfänger und ich weiß nicht wie das problem lösen kann

    es heisst also das die operator definition local nicht zulässig ist und das das zeichen "{" hier einfach nicht stehen sollte, nicht passt

    aber wie muss es denn dann gemacht werden?



  • Du kannst keine Funktionen innerhalb anderer Funktionen definieren. Überlade die Stream-Operatoren ausserhalb von Travel::getRequets() (müsste das nicht getRequests() heissen?).



  • Funktionsdefinitionen gehören nicht innerhalb einer Funktion. Zieh das einfach aus der main Funktion raus.

    #include "Travel.h"
    
    struct Passenger
    {
        std::string name;
        unsigned int weight;
        unsigned int groupCode;
        unsigned int id;
    }; 
    
        inline
        std::istream& 
        operator>>(std::istream& is, Passenger& p) {
            Passenger tmp;
            std::getline(is, tmp.name); 
            is >> tmp.weight
               >> tmp.groupCode
               >> std::ws;
            if (is) 
                p = tmp;
            return is;
            }
    
        inline
        std::ostream& 
        operator<<(std::ostream& os, const Passenger& p) {
                return os  << p.name << '\n'
                           << p.weight << '\n'
                           << p.groupCode << '\n'
                           << '\n';
        }
    
    void Travel::getRequets(){
        std::ifstream is( "inFile" );
    
        Passenger p;
    
        if ( ! is.eof() )
            std::cerr << "File/Format Error";
    
    }
    

Log in to reply