Überladener Operator + funktioniert nicht. Seltsam



  • Hallo Forumsgemeinde,

    ich hätte da ein Programmierproblem. Mein C++ Compiler akzeptiert bei befreundeten Funktionen keine übrladenen Operatoren.
    Wer kann helfen?

    class Komplex
    {
    
    //An dieser Stelle meckert der Compiler.
    // Wenn ich operator+ durch z.B. meineFunktion ersetze gibts
    // keine Fehlermeldung.
    friend Komplex operator+ (const Komplex zahl1, const Komplex zahl2);
    
    private:
    	long double re;
    	long double im;
    
    public:
    
    	// Konstruktor
    	Komplex(long double re, long double im);
    
    	// Ausgabe
    	ausgabe();
    
    	// Konjugiert die komplexe Zahl
    	konjug();
    
    	// Den Betrag der komplexen Zahl ausgeben
    	long double betrag();
    
    	// Gibt den Winkel aus
    	float winkel();
    
    	// +
    	Komplex* operator+(Komplex EINS);
    
    	// Destruktor
    	~Komplex(void);
    
    };
    
    Komplex operator+ (const Komplex zahl1, const Komplex zahl2)
    {
    
    }
    

    Hier die Fehlermeldung:
    Kompilierung läuft...
    main.cpp
    c:\dokumente und einstellungen\jfk\desktop\vers 1\komplex.h(4) : fatal error C1001: INTERNER COMPILER- FEHLER
    (Compiler-Datei "msc1.cpp", Zeile 1786)
    Bitte wählen Sie im Menü "?" von Visual C++
    den Befehl "Software Service", oder öffnen Sie die Hilfedatei für den Software Service, um weitere Informationen zu erhalten
    Fehler beim Ausführen von cl.exe.

    main.obj - 1 Fehler, 0 Warnung(en) 😕



  • NACHTRAG!!!!!!!

    // + 
        Komplex* operator+(Komplex EINS);
    

    Diese Zeile kann natürlich rausgenommen werden, aber der Fehler tritt dennoch auf



  • Hallo,
    installier mal das Service Pack 5 (für das Visual Studio). Dann sollte dein Problem verschwinden.

    Der Code ist korrekt, wenn auch nicht schön. Den operator+ solltest du lieber über den operator+= implementieren. Damit ersparst du dir nicht nur arbeit sondern auch das friend. Gleichzeitig gibt es für Benutzer deiner Klasse weniger Überraschungen.



  • Vielen Dank jetzt funktioniert alles einwandfrei!
    Das mit dem operator += ist auch eine gute Idee.
    Danke. 🙂


Anmelden zum Antworten