Ü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 ;))