Überladung von Operator



  • Hallo Leute,

    ich hab ein Problem mit der Überladung von OPeratoren.

    Ich erhalte immer den Fehler:

    error C2679: Binärer Operator '+': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'string' akzeptiert (oder keine geeignete Konvertierung möglich)

    mit folgendem Code:

    #include "stdafx.h"
    #include <string.h>
    
    class string
    {
    	char *wert;
    
    public:
    	string &string::operator+(char *);
    	string::string(char *);
    	string::string();
    };
    
    string::string()
    {
    	*wert=0;
    }
    
    string::string(char *text)
    {
    	wert=text;
    }
    
    string &string::operator+(char *text)
    {
    	wert=strcpy(wert,text);
    	return *this;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	string str("Hallo");
    	string s1("erster Teil");
    	string s2("Zweiter Teil");
    	string s3;
    	s3 = s1 + s2;
    	return 0;
    }
    

    Ich arbeite zwar mit Visual C++ .NET, aber ich denke das Problem passt eher hier her, als in die Visual .NET Ecke

    Wäre toll, wenn mir jemand helfen könnte.

    Vielen Dank schon mal im Voraus

    MfG Benjamin



  • Was ist an der Fehlermeldung nicht verständlich?



  • s3 = s1 + s2;

    Naja, es ist wie er es dir gesagt hat.;) Dein + operator unterstüzt erwartet als "Parameter" einen char*, aber du gibst ihm hier ja ein string objekt. Du brauchst also entweder zusätzlich einen + Operator der mit einem string objekt umgehen kann oder du musst den cast operator nach char* implementieren.

    Noch was am Rande: wenn du einen char * an eine Funktion übergibst der nur für die Eingabe dient und nicht verändert werden soll, dann solltest du den Parameter als const char * definieren. Es wäre auch nicht ratsam in deiner String klasse einen cast operator für char* zu definieren, sondern höchstens einen für const char *, da die Daten ja nicht so einfach auserhalb deines String objektes bearbeitet werden sollen.



  • Du hast einen operator+ für string und char*, aber keinen, der zwei string's verknüpft (und du hast auch keinen Operator definiert, der dir den string s2 in einen char* umwandeln kann.

    (btw, über die Funktionsweise des Operators und die verbundenen Laufzeitprobleme decken wir mal den Mantel des Schweigens ;))


Anmelden zum Antworten