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 einesbool
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
stattNULL
in C++. - können Sie erklären, warum?
int i = NULL;
gültig ist, in der Erwägung, dassint 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Nicht, wenn Sie möchten, dass das Programm zu arbeiten.
Können Sie die
return
Schlagwort mit nichts, nur in Funktionen mit einem Rückgabetypvoid
. Sie können diereturn
keyword mitNULL
in einer Funktion, die einen Zeiger (nicht-Referenz -) Typ als Rückgabe-Typ.Je nachdem, wie
NULL
definiert ist, ich nehme an, man könnte auch zurückNULL
von Funktionen mitint
als Ihre Rückkehr zu geben, aber es würde mehr Sinn machen, nur 0 zurück.Können Sie das nicht tun, weil die Erklärung Ihrer Funktion als
string& sortAndMerge(string &u, int start, int end)
Ihnen Versprechen-Funktion Anrufer einen string-Referenz. Also alle Anrufer erwarten und darauf warten, zu einer string-Referenz. Also compiler nicht zulassen, dass der Bruch dieser Versprechen (Regeln).
Entweder Sie müssen zurückgeben, was Sie Versprechen oder neu definieren-Funktion geben Sie einen anderen Datentyp. Sie betrachten
Enum
,Union
oder einige andere Sache, wenn Sie brauchen, um wieder verschiedene Dinge. Andere als diese, können Sie trow eine Ausnahme, die zum beenden der Funktion ohne return. aber es berücksichtigt nicht die richtige Funktion ausführen.