Freigeben über


Deklarationen und Definitionen (C++)

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

Deklarationen

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

  1. Ist ein Funktionsprototyp (eine Funktionsdeklaration ohne Funktionstext).

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

  3. Ist ein statischer Datenmember innerhalb einer Klassendeklaration.

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

  4. Ist eine Klassennamen ohne Deklaration, z. B. folgende Definition class T;.

  5. Ist eine typedef-Anweisung.

Beispiele für Deklarationen, die auch Definitionen sind, 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;
};

Mehrere Deklarationen, die keine Definitionen sind, sind:

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

Definitionen

Eine Definition ist eine eindeutige Spezifikation eines Objekts oder der Variablen, einer Funktion, einer Klasse oder des Enumerators.Da Definitionen eindeutig sein müssen, kann ein Programm nur eine Definition für ein angegebenes Programmelement enthält.Es kann eine n:1 Entsprechung zwischen Deklarationen und Definitionen geben.Es gibt zwei Fälle, in denen ein Programmelement deklariert werden und nicht definiert werden kann:

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

  2. Eine Klasse kann nur auf eine Weise verwendet, die ihre Definition nicht erforderlich ist.Allerdings muss die Klasse deklariert werden.Der folgende Code 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