operator>> überladen



  • soweit windows copy & paste fehlerfrei beherrscht, sollte das das programm sein 🙂



  • ich galubs nicht.

    ich habe jetzt einen neuen projektarbeitsbereich erstellt und den code darein kopiert. jetzt klappt es wunderbar. ich frag mich zwar wieso, aber naja. 🙄

    das problem hat sich somit erledigt. danke für die versuche zu helfen 🙂



  • fräger schrieb:

    ich galubs nicht.

    ich habe jetzt einen neuen projektarbeitsbereich erstellt und den code darein kopiert. jetzt klappt es wunderbar. ich frag mich zwar wieso, aber naja. 🙄

    das problem hat sich somit erledigt. danke für die versuche zu helfen 🙂

    rubbish. es tut mir leid, aber ich habe mich wieder zu früh gefreut. die ausgabe von "hallo" hat mich etwas stutzig gemacht und satmmte aus einem alten projekt. wieder in einem neuen projektarbeitsbereich kommen wieder besagte fehlermeldungen 😞



  • ich habe jetzt mal einen anderen compiler runtergeladen (dev-c++) und er kompiliert den code anstandslos...



  • hallo nochmal,

    ich habe ein neues problem mit meiner klasse.

    ich habe meine klasse "Test" nun versucht zum template umzubauen, was allerdings am überladenen operator>>() scheitert. hier die relevanten code-auszüge:

    template <class T>
    class Test 
    { 
    public: 
    
    //...    
    
    template <class T>
    friend istream& operator>>(istream& in, Test<T>& testit);
    
    private: 
        T m_Value;
    };
    

    so ist der operator>>() definiert:

    template <class T>
    istream& operator>>(istream& in, Test<T>& testit)
    { 
    	in >> testit.m_Value; 
    
    	return in; //error C2562: '>>' : 'void'-Funktion gibt einen Wert zurueck
    }
    

    wenn ich nun in der main-funktion folgendes schreibe:

    int main() 
    { 
    //...
    Test<int> test(10);
    cin>>test; //Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl operator >>(class std::basic_istream<char,struct std::char_traits<char> > &,class Test<int> &)'
    return 0;
    }
    

    bekomme ich fehler, wie in den kommentaren zu sehen sind.
    das ganze muss irgendwie mit der tatsache, dass >> als friend deklariert ist zusammenhängen, denn beim überladenen operator<< funktioniert alles wunderbar.

    wäre dankbar, wenn mal jemand drüberschauen würde 🙂



  • Hi,

    bei mir hat diese Variante ganz gut funktioniert.
    Versuche das mal so in Deinem Template zu benutzen. Vielleicht funzt Dein Template ja dann.
    (Ich versuche nur noch, das mit friend hinzubekommen, aber funzen tut es so schon mal.)

    class Test 
    { 
    public: 
        Test() {} 
        Test(int value) : m_Value(value) {} 
        ~Test() { m_Value = 0; } 
    
        int getValue() const { return m_Value; } 
    	void setValue(int value) { m_Value = value; } 
    
    	//friend einfach weglassen und setValue() benutzen, da sonst error C2593: 'operator >>' is ambiguous
        //friend istream& operator>>(istream& in, Test& test); 
    
    private: 
        int m_Value; 
    }; 
    
        ostream& operator<<(ostream& out, const Test& test) 
        { 
            out << test.getValue();  
            return out; 
        } 
    
        istream& operator>>(istream& in, Test& test) 
        { 
    
    		char buf[12];
            in >> buf; 
    		test.setValue(atoi(buf));
            return in; 
        }
    


  • Kann mir einer verraten, warum ich bei dieser Implementierung nach dem Aufruf von cin>>test; die Fehlermeldung:
    error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class Test' (or there is no acceptable conversion)
    bekomme?

    class Test 
    { 
    public: 
        Test() {} 
        Test(int value) : m_Value(value) {} 
        ~Test() { m_Value = 0; } 
    
        int getValue() const { return m_Value; } 
    	void setValue(int value) { m_Value = value; } 
    
        istream& operator>>(istream& in){
    		char buf[12];
            in >> buf;
    		m_Value = atoi(buf);
            return in; 
    	}
    
    private: 
        int m_Value; 
    };
    


  • fit schrieb:

    Kann mir einer verraten, warum ich bei dieser Implementierung nach dem Aufruf von cin>>test; die Fehlermeldung:
    error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class Test' (or there is no acceptable conversion)
    bekomme?

    Den operator, den du da implementiert hast, müsstest du mit

    test >> cin;

    aufrufen.



  • Ups... 🙄



  • Falls Du noch nicht den Visual Studio Service Pack (worin auch die Fixes für Visual C++ enthalten sind - aktuell ist Service Pack 5 glaube ich) installiert hast, dann solltest Du das jetzt tun. Denn so einen Fehler hatte ich auch mal (ich hab das Posting nur mal übereflogen, deswegen weiß ich nicht ob's das gleiche ist).

    Denn in diesem Fall ist ein Fehler im Visual Studio (was ja das erfolgreiche Compilieren mit 'nem anderen Compiler belegt).

    Da ist der SP zu finden (für Visual Studio/C++ 6.0):
    http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/dnldoverview.aspx


Anmelden zum Antworten