Warum kann eine statische Elementfunktion nur innerhalb der Klassendefinition und nicht auch in ihrer eigenen Definition als statisch deklariert werden?

Während ich eine Klasse zum Erstellen / Aktualisieren von Feldern auf dem Bildschirm implementierte, wollte ich eine statische Elementfunktion hinzufügen, die sicherstellt, dass sich keine derzeit sichtbaren Felder überlappen (indem die Informationen aus einem statischen Zeigerarray auf alle derzeit sichtbaren Felder übertragen werden).

Mein Anfangscode hatte die folgende Struktur:

class Box
{
public:
    // ...
    static void arrangeOverlappingBoxes();
};

static void Box::arrangeOverlappingBoxes()
{
    // ...
}

Ich war ziemlich überrascht, dass dies einen Fehler verursachte. C2724: 'static' sollte nicht für Member-Funktionen verwendet werden, die im Dateibereich definiert sind.

Mit einigem Hin und Her habe ich herausgefunden, dass meine Funktionsdefinition das Schlüsselwort @ verlieren solltstatic, d. h. es sollte @ se

void Box::arrangeOverlappingBoxes()
{
    // ...
}

Aber ich habe keine Ahnung, was die Begründung dahinter sein könnte. Es scheint so asymmetrisch und verwirrend zu sein, einen anderen Funktionsheader für seine Deklaration in der Klassendefinition und seine eigene Definition zu haben. Gibt es einen Grund dafür?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage