Heim > Artikel > Backend-Entwicklung > Warum erhalte ich die Fehlermeldung „Undefinierte Referenz“, wenn ich statische Konstantenreferenzen an Funktionen übergebe?
Undefinierte Referenzen mit statischen Konstantenreferenzen
Beim Implementieren einer Funktion mit einer Referenz auf eine statische Konstante, wie z. B. const int & a, der Compiler kann auf den Fehler „Undefinierte Referenz“ stoßen. Dieser Fehler ist auf die Tatsache zurückzuführen, dass die Konstante zwar als statisch deklariert ist, aber nicht in dem Kontext definiert ist, in dem die Funktion aufgerufen wird.
Gemäß dem C-Standard (9.4.2/4) eine statische Konstante Datenmember eines const-Integraltyps können mit einem Konstanteninitialisierer in ihrer Deklaration initialisiert werden. Wenn es jedoch in einem Funktionsparameter verwendet wird, stellt die Übergabe als konstante Referenz eine „Verwendung“ dar (gemäß 3.2/2) und löst die Anforderung für seine Definition innerhalb des Namespace-Bereichs aus.
Im bereitgestellten Beispiel wird die Die statische Konstante kConst wird in der Funktion foo über die Zeile foo(kConst) verwendet. Da die Konstante nirgendwo definiert ist, versucht der Compiler, eine Referenz auf ein undefiniertes Objekt zu erstellen. Um dieses Problem zu lösen, muss der Entwickler entweder eine Definition für kConst bereitstellen oder die Konstante als Wert übergeben (wodurch eine temporäre Objekterstellung erzwungen wird), wie in der im Beispiel vorgeschlagenen Lösung gezeigt.
Während GCC möglicherweise die Übergabe der Konstante als Wert zulässt (über static_cast
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Undefinierte Referenz“, wenn ich statische Konstantenreferenzen an Funktionen übergebe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!