Externe Deklarationen und Definitionen
Nach oben zu Deklarationssyntax - Index
Die Speicherklassen-Bezeichner auto und register dürfen nicht in einer external-Deklaration verwendet werden. Für jeden Bezeichner in einer Übersetzungseinheit, der mit interner Bindung deklariert ist, darf nur eine externe Definition angegeben werden.
Eine externe Definition ist eine externe Deklaration, die ein Objekt oder eine Funktion zusätzlich definiert, also auch Speicherplatz reserviert. Wird ein Bezeichner mit externer Bindung in einem Ausdruck verwendet (außer als Teil des Operanden von sizeof), muss es im gesamten Programm genau eine externe Definition für diesen Bezeichner geben.
Der C++ Compiler erlaubt, dass externe Namen (wie die von Arrays, Strukturen und Varianten) später deklariert werden. Auf diese Weise können früheren Deklarationen Informationen hinzugefügt werden. Hierzu ein Beispiel:
int a[]; // keine Größenangabe struct mystruct; // nur Tag, keine Member-Deklarationen . . . int a[3] = {1, 2, 3}; // Größe angeben und initialisieren struct mystruct { int i, j; }; // Member-Deklarationen hinzufügen
Das folgende Syntaxdiagramm beschreibt die Klassendeklarationssyntax. Im Abschnitt zu den Klassen (beginnt mit Klassen), finden Sie Beispiele für die Deklaration einer Klasse. Das Thema L-Wert-Referenzen enthält detaillierte Informationen zu C++-Referenz-Typen (nahe verwandt mit Zeiger-Typen). Eine Erläuterung von Klassen-Templates finden Sie unter Verwenden von Templates.
C++Builder-Syntax für die Deklaration von Klassen (nur C++)
Klassen-Bezeichner: Klassenkopf { <Member-Liste> } Klassenkopf: Klassenschlüssel <Bezeichner> <Basis-Bezeichner> Klassenschlüssel Klassenname <Basis-Bezeichner> Member-Liste: Member-Deklaration <Member-Liste> Zugangs-Spezifizierer: <Member-Liste> Member-Deklaration: <Mehrere Dekl.-Bez.> <Member-Deklaratorliste>; Funktionsdefinition <;> Qualifizierter Name ; Member-Deklaratorliste: Member-Deklarator Member-Deklarator-Liste, Member-Deklarator Member-Deklarator: Deklarator <Abstrakt-Bezeichner> <Bezeichner> : Konstantenausdruck Abstrakt-Bezeichner: = 0 Member-Initialisierer-Liste: Member-Initialisierer Member-Initialisierer , Member-Initialisierer-Liste Member-Initialisierer: Klassenname ( <Argumentliste> ) Bezeichner ( <Argumentliste> ) Operator-Funktionsname: operator Operator-Name Basis-Bezeichner: : Basisliste Klassenname virtual <Zugriffs-Bezeichner> Klassenname Zugriffs-Bezeichner <virtual> Klassenname Basisliste: Basis-Bezeichner Basisliste , Basis-Bezeichner Zugriffs-Bezeichner: private protected public Konvertierungs-Funktionsname: operator Konvertierungs-Typname Konvertierungs-Typname: Typ-Bezeichner <Zeiger-Operator> Konstruktor-Initialisierer: :Member-Initialisierer-Liste Operatorname: jeweils aus der Menge new delete sizeof typeid + - * / % ^ & | ~ ! = <> += -= =* /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ __ , ->* -> () [ ] .*