Warum kann eine statische member-Funktion nur als static deklariert, die innerhalb der Klassendefinition und nicht auch in der eigenen definition?
Während der Implementierung einer Klasse für die Erstellung/Aktualisierung von Feldern auf dem Bildschirm, ich wollte noch hinzufügen einer statischen member-Funktion stellt sicher, dass keine aktuell sichtbaren Felder überlappen (nimmt seine Informationen aus einem statischen Zeiger-array, um alle aktuell sichtbaren Felder)
Meinem ersten code hat folgende Struktur:
class Box
{
public:
//...
static void arrangeOverlappingBoxes();
};
static void Box::arrangeOverlappingBoxes()
{
//...
}
War ich ziemlich überrascht, dass dies einen Fehler erzeugt C2724: 'statische' sollte nicht verwendet werden für die definierten Funktionen im Datei-Bereich.
Mit einigen trial, google und Irrtum habe ich herausgefunden, dass meine Funktion definition verlieren sollte die keyword -static
, d.h. es sollte
void Box::arrangeOverlappingBoxes()
{
//...
}
Doch ich habe keine Ahnung, was die Hintergründe sein könnten. Es scheint so zu sein asymmetrisches und verwirrend, wenn eine andere Funktion header für seine Erklärung in der definition der Klasse und Ihrer eigenen definition. Gibt es dafür irgendeinen Grund?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Klassendefinition (in der header-Datei) wird die Funktion mit dem, was propreties sind notwendig :
Wenn man bedenkt, dass jedes weitere Objekt Aussehen wird bei der Klassendefinition mit dem .h dann macht es Sinn, dass diese Eigenschaften werden definiert.
Darüber hinaus jede Funktion aus der Klasse mentain es ist Eigentum in den abgeleiteten Klassen (zum Beispiel müssen Sie deklariert den Destruktor virtual nur in Ihrer Basis-Klasse für alle nachfolgenden Vererbung stattfinden wird der Destruktor als virtual).
Macht es keinen Sinn, deklarieren Sie diese Eigenschaften in Ihrer Implementierung Körper .
Dass declare function Anstand in beide .h und .cpp-Dateien führen tatsächlich zur Ermittlung von Problemen.
Stellen Sie sich dieses Szenario : Sie deklarieren eine Funktion, die als virtuelle eine .h-Datei, und als statisch in der .cpp-Datei. Was wird dem compiler, dass die Funktion ? virtual oder static ? (oder eher einen compile-Fehler , aber der compiler-Fehlermeldung wird nur fordere Sie auf, entsprechen in Ihrer .cpp-Datei, die die Deklaration in der header. Sie können nicht überladen einer Funktion entsprechend auf "static" oder "virtuellen").