externe string Variable in Funktion verändern



  • Hi.

    Ich habe eine Funktion der ich eine Variable des Types string übergebe und in der Funktion ändern möchte und im Anschluss mit dem geänderten Wert ausserhalb der Funtkion weiterarbeiten.

    void Edit(string *Text)
    {
    string zeile = "Hallo World!";
    Text = zeile.substr(1,5); // hier wird der folgende Fehler erzeugt:
    // error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' a
    }
    
    string Text = "xxx";
    Edit(&Text)
    cout << Text; // sollte nun "allo" sein.
    

    kann mir da wer bitte weiterhelfen?



  • Du musst Text vor der Zuweisung noch dereferenzieren, denn im Moment weist du ein string-Objekt einem Pointer auf ein string-Objekt zu.



  • Wie wärs mir:

    string Edit(string *Text)
    {
    string zeile = "Hallo World!";
    string zeile2 = zeile.substr(1,5); // hier wird der folgende Fehler erzeugt:
    // error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' a
    return zeile2;
    }
    int main(){
    string Text = "xxx";
    cout << Edit(&Text);; // sollte nun "allo" sein.
    }
    


  • Übergib den String per Referenz.



  • Danke für eure Antworten.

    Als Anfänger bin ich jetzt aber etwas verwirrt, vorher dereferenzieren und dann doch als Referenz?

    Also soll ich so abändern?

    string Text = "xxx";
    string &ref = Text;
    Edit(&ref);

    ??

    Der Fehler bleibt aber der selbe bzw ich habs nicht verstanden, wie es gemeint ist 🤡



  • Nein, du hast das falsch verastanden - du sollst keine Referenz im Hauptprogramm erzeugen:

    Möglichkeit a (Zeiger dereferenzieren):

    void Edit(string *Text)
    {
      string zeile = "Hallo World!";
      *Text = zeile.substr(1,5);//mit diesem '*' erhältst du das Objekt hinter dem Zeiger und kannst es bearbeiten
    }
    
    string Text = "xxx";
    Edit(&Text);
    cout << Text;
    

    (Anmerkung: Diese Methode stammt noch aus C-Zeiten und ist dank Referenzen inzwischen überholt)

    Möglichkeit b (Übergabe als Referenz):

    [cpp]void Edit(string &Text)//keinen Zeiger übergeben, sondern eine Referenz
    {
      string zeile = "Hallo World!";
      Text = zeile.substr(1,5);
    }
    
    string Text = "xxx";
    Edit(Text);//Achtung! Hier entfällt jetzt der Adress-Operator.
    cout << Text;
    


  • Ahhhaaaa.

    Vielen Dank! Ich werde mir das kopieren und in Textdatei aufbewahren, damit ich das niemals mehr vergessen. Danke für diese schnelle gute Hilfe. 👍


Anmelden zum Antworten