Operator += funktioniert nicht

Liebe Leute

Ich schreibe gerade eine Klasse in C++.
Da ich noch fast keine Erfahrung damit habe, probiere ich ein bisschen rum. Der operator+ hat schon ganz gut geklappt. nun habe ich ihn wortwörtlich abgeschrieben, aber im Prototyp und dem Operator das operator+ durch operator+= ersetzt, damit ich später text+=zweiterText schreiben kann.

Leider zeigt der neue Operator keine Wirkung. text=text+„Hallo“; funktioniert zwar, aber text+=„Hallo“; geht nicht.

Hier ist mein Operator +=:

sanstring sanstring::operator+=(const char \*chaine)
{
 int tailleTotale = m\_longueur + longeur(chaine);
 char \*sommeChaines = new char[tailleTotale + 1];

 for (int i = 0 ; i 

Wo ist der Wurm drin?

Liebe Grüsse
Kalsan

Leider zeigt der neue Operator keine Wirkung.
text=text+„Hallo“; funktioniert zwar, aber text+=„Hallo“; geht
nicht.

sanstring resultat(sommeChaines);
delete[] sommeChaines;
cout

Wo ist der Wurm drin?

Der Ausdruck text+=„Hallo“ verwirft den Return-Wert.
In dem +=Operator wird m_chaine nicht geändert.

Viele Grüße
Thorsten

Hallo Thorsten

Herzlichen Dank für deine Antwort.

Was muss ich denn machen, damit der return-Wert übernommen wird und das Programm funktioniert?

Liebe Grüsse
Kalsan

Hallo Kalsan,

Herzlichen Dank für deine Antwort.

Was muss ich denn machen, damit der return-Wert übernommen
wird und das Programm funktioniert?

Ne, Ne … Wenn du eine Funktion

int f(int a)
{
return a+1;
}

hast und sie mit

f(5);

aufrufst, so wird der return-Wert verworfen. Daran kann die Funktion nichts ändern :smile: Um an den Inhalt von result zu gelangen, könntest Du text2 = (text += „Hallo“); schreiben, aber das ist natürlich nicht besonders elegant und schlechter Programmierstil.

Was Du tun musst ist:
Bei dem Aufruf text +=„Hallo“, wird die Member-Funktion „operator+=“ von der Instanz text aufgerufen, d.h. Du musst in der operator-Funktion das Ergebnis in m_chaine speichern, damit text hinterher den richtigen String enthält.
d.h. text += „Hallo“ bedeuted eigentlich text.operator+=(„Hallo“);

Viele Grüße
Thorsten

1 Like

Perfekt erklärt!

Herzlichen Dank!!!

m_chaine = copie(resultat.get()); hat’s gebracht.

Liebe Grüsse
Kalsan

*4u