In C++ gibt es eine Möglichkeit zur Rückkehr nichts von einer Funktion, die einen Rückgabetyp Zeichenfolge&?

Ich versuche zu implementieren ist die folgende subroutine.

string& sortAndMerge(string &u, int start, int end){
    if(end>=0){

        int mid=(start+end)/2;

        if(start<end){
            sortAndMerge(u,start,mid);
            sortAndMerge(u,mid+1,end);
            return merge(u,start,mid,end);
        }
    }
    return;
}

Die Funktion aufgerufen wird, wie sortAndMerge(s,0,s.length()-1), hier s ist ein string. Als 3. parameter kann am Ende wird negative, ich brauche das Unterprogramm zu ignorieren solcher Fälle.

Ich erhalte den folgenden Fehler:-

return-statement with no value, in function returning std::string& {aka std::basic_string<char>&}’ [-fpermissive].

Habe ich zwei Fragen.

1) gibt es eine Möglichkeit, ich kann nichts von einer Funktion mit einem return-Typ als void.

2) Wann kann ich mit dem Schlüsselwort return mit nichts oder NULL.

  • Nicht sicher, warum dies notwendig ist. Der string wird übergeben ref, warum Sie die Rücksendung etwas? So lange, wie Sie Ihre merge Funktion nimmt den string von ref als auch void tun
  • Wenn end negativ ist ein Fehler Bedingung sollte eine Ausnahme ausgelöst werden. Oder umgestalten-Funktion zur Rückgabe eines bool zeigt, dass Erfolg oder Misserfolg.
  • Nein, Verweise ist ein alles-oder-nichts-Angelegenheit, entweder Sie haben eine gültige Referenz auf ein bestehendes Objekt, oder Sie können keine Referenzen verwenden. Und das ist ein Weg könnte hier nehmen, einfach wieder von Wert.
  • Sie muss wieder eine Referenz, und es gibt keine Art von null-Verweis. Wenn der return-Wert ist eine Art Zeiger, dann durch die Konventionen können Sie die Rückgabe auch 0 (oder NULL), was bedeutet, dass die Adresse nix. In Ihrem Fall sollten Sie erwägen, mit Ausnahmen.
  • Richtig! Ich Folge verpasst.
  • Sie scheinen nicht zu verwenden, ist der Rückgabewert sowieso so ändern Sie die Funktion zu haben void zurück geben
  • Eine Sache, die Sie tun können, in diesem Fall ist die Rückgabe einer Referenz auf eine statische dummy-variable, z.B. static string dummyString; return dummyString; (statischer tag wird dafür sorgen, dass die zurückgegebene Referenz gültig bleibt, nachdem die Funktion -- beachten Sie, dass die Funktion der return-Typ muss wohl 'const string &', anstatt nur 'string &', wenn möglich, obwohl, um zu vermeiden, die Möglichkeit der aufrufende code änderung des Wertes der dummy-variable)
  • Beachten Sie, dass Sie verwenden sollten nullptr statt NULL in C++.
  • können Sie erklären, warum?
  • int i = NULL; gültig ist, in der Erwägung, dass int i = nullptr; ist nicht, und Sie nicht möchten, dass diese Umstellung.
  • Zum Beispiel hat es einen besseren Namen. Überprüfen Sie auch dieser, dieser und dieser.

InformationsquelleAutor sid21g | 2015-10-27
Schreibe einen Kommentar