Freigeben über


Deklarationen und Definitionen (C++)

Deklarationen teilen dem Compiler mit, dass ein Programmelement oder -name vorhanden ist. Definitionen geben an, welchen Code oder welche Daten der Name beschreibt. Der Name muss deklariert werden, bevor er verwendet werden kann.

Deklarationen

Eine Deklaration führt mindestens einen Namen in ein Programm ein. Deklarationen können in einem Programm mehrmals vorkommen. Daher können Klassen, Strukturen, Enumerationstypen und andere benutzerdefinierte Typen für die einzelnen Kompilierungseinheiten deklariert werden. Die Einschränkung für diese mehrfache Deklaration besteht darin, dass alle Deklarationen identisch sein müssen. Deklarationen dienen als auch Definitionen, außer wenn auf die Deklaration Folgendes zutrifft:

  1. Sie ist ein Funktionsprototyp (eine Funktionsdeklaration ohne Funktionstext).

  2. Sie enthält den extern-Bezeichner, jedoch keinen Initialisierer (Objekte und Variablen) oder Funktionsrumpf (Funktionen). Dies gibt an, dass die Definition nicht notwendigerweise in der aktuellen Übersetzungseinheit ist, und weist dem Namen eine externe Bindung zu.

  3. Sie ist von einem statischen Datenmember innerhalb einer Klassendeklaration.

    Da statische Klassendatenmember diskrete Variablen sind, die für alle Objekte der Klasse freigegeben werden, müssen sie definiert werden und außerhalb der Klassendeklaration initialisiert werden. (Weitere Informationen zu Klassen und Klassenmembern finden Sie unter Klassen).

  4. Sie ist eine Klassennamendeklaration ohne nachfolgende Definition, wie class T;.

  5. Sie ist eine typedef-Anweisung.

Beispiele für Deklarationen, die auch Definitionen sind:

// Declare and define int variables i and j.
int i;
int j = 10;

// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox.
class CheckBox : public Control
{
public:
            Boolean IsChecked();
    virtual int     ChangeState() = 0;
};

Beispiele für Deklarationen, die keine Definitionen sind:

extern int i;
char *strchr( const char *Str, const char Target );

Definitionen

Eine Definition ist eine eindeutige Spezifikation eines Objekts oder einer Variable, Funktion, Klasse oder eines Enumerators. Da Definitionen eindeutig sein müssen, kann ein Programm nur eine Definition für ein gegebenes Programmelement enthalten. Es kann eine n:1-Zuordnung zwischen Deklarationen und Definitionen vorgenommen werden. Es gibt zwei Fälle, in denen ein Programmelement deklariert werden und nicht definiert werden kann:

  1. Eine Funktion wird deklariert, aber nie mit einem Funktionsaufruf oder einem Ausdruck, der die Adresse der Funktion akzeptiert, referenziert.

  2. Eine Klasse wird nur auf eine Weise verwendet, die nicht erfordert, dass ihre Definition bekannt ist. Allerdings muss die Klasse deklariert werden. Das folgende Codebeispiel veranschaulicht einen solchen Fall:

    // definitions.cpp
    class WindowCounter;   // Forward reference; no definition
    
    class Window
    {
       // Definition of WindowCounter not required
       static WindowCounter windowCounter;
    };
    
    int main()
    {
    }
    

Siehe auch

Referenz

Grundlegende Konzepte