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
+ - * / % ^
& | ~ ! = <>
+= -= =* /= %= ^=
&= |= << >> >>= <<=
== != <= >= && ||
++ __ , ->* -> ()
[ ] .*