Externe Deklarationen und Definitionen

Aus RAD Studio
Wechseln zu: Navigation, Suche

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

Siehe auch