mehrere Mitglieder Funktion Vorwärtsdeklarationen

8

In C ++ kann ich mehrere Vorwärtsdeklarationen von Funktionen haben wie:

%Vor%

Und trotzdem beklagt sich VC ++ 2010, wenn ich das gleiche für Member-Funktionen tue (ob ich eine Definition einschließe oder nicht):

%Vor%

Ich konnte online nichts über die Forward-Deklarationen mehrerer Member-Funktionen finden, ob legal, illegal, VC ++ -spezifisch, ect ... Gibt es einen Weg dazu? Ist es illegal?

Nun, warum sollte ich das tun? Kein Projekt im Besonderen spielte nur mit verschiedenen Arten, Funktionen zu registrieren. In anderen Projekten musste ich Funktionen / Klassen registrieren und verwendete weniger hack-ish, aber mehr langweilige Methoden und versuchte nur (zum Spaß) verschiedene Methoden mit Makros / Templates.

Irgendwelche Ideen oder Gedanken? Speziell zur obigen Frage, aber auch zum Registrieren von Funktionen / Klassen.

Vielen Dank im Voraus für Ihre Zeit;)

    
Kaisha 12.05.2011, 15:24
quelle

3 Antworten

11

Sie können nicht mehrere Deklarationen einer Elementfunktion in einer Klasse haben. Dein Code verletzt 9.3/2 des C ++ Standards, der

sagt
  

Außer für die Definitionen der Elementfunktionen     Diese erscheinen außerhalb einer Klassendefinition und mit Ausnahme von expliziten Spezialisierungen von Memberfunktionen der Klasse     Vorlagen und Memberfunktionsvorlagen (14.7), die außerhalb der Klassendefinition erscheinen, eine Memberfunktion soll nicht neu deklariert werden.

    
Prasoon Saurav 12.05.2011 15:27
quelle
5

Es müssen keine Memberfunktionen deklariert werden. Sie sind sowieso in der ganzen Klasse sichtbar.

    
Bo Persson 12.05.2011 15:26
quelle
1

Wie Mark B sagt, wird das Deklarieren von freien Funktionen und das Deklarieren von Elementfunktionen anders behandelt.

Freie Funktionsdeklarationen können überall verstreut sein, und es wäre limitierend, dass nur eine übereinstimmende Deklaration in einem Programm vorhanden sein muss.

Sie können jedoch eine Klasse nur in einem großen Teil der Klassendefinition 1 definieren, so dass alle ihre Member-Deklarationen an einer Stelle gefunden werden. Sie können nicht über Ihr Programm verstreut werden; Folglich gibt es keinen Grund dafür, dass der Standard es Ihnen erlaubt, mehrere Mitgliedsdeklarationen zu schreiben ... also nicht:

  

Außer für die Definitionen der Elementfunktionen   die außerhalb einer Klasse angezeigt werden   Definition und außer explizit   Spezialisierungen von Mitgliedsfunktionen von   Klassenvorlagen und Member-Funktion   Vorlagen (14.7) erscheinen außerhalb von   die Klassendefinition, ein Mitglied   Funktion wird nicht neu deklariert. [9.3 / 2]

  1. Sicher, Sie können diese Klassendefinition mehrfach in ein Programm aufnehmen, aber muss genau entsprechen, also könnte es für die Zwecke dieser Diskussion auch nur eine einzige Definition sein. li>
quelle

Tags und Links