Freigeben über


Zeitpunkt der Deklarationen

Es wird angenommen, dass ein Name unmittelbar nach seinem Deklarator, jedoch vor seinem (optionalen) Initialisierer deklariert wird. (Weitere Informationen über Deklaratoren finden Sie unter Deklaratoren.) Es wird angenommen, dass ein Enumerator unmittelbar nach dem Bezeichner, der ihn benennt, jedoch vor dem (optionalen) Initialisierer deklariert wird.

Betrachten Sie das folgende Beispiel:

// point_of_declaration1.cpp
// compile with: /W1 
double dVar = 7.0;
int main()
{
   double dVar = dVar;   // C4700
}

Wenn der Punkt der Deklaration nach der Initialisierung lag, würde der lokale dVar auf 7,0 initialisiert, den Wert der globalen Variablen dVar. Da dies jedoch nicht der Fall ist, wird dVar mit einem nicht definierten Wert initialisiert.

Enumeratoren folgen derselben Regel. Allerdings werden Enumeratoren in den einschließenden Bereich der Enumeration exportiert. Im folgenden Beispiel werden die Enumeratoren Spades, Clubs, Hearts und Diamonds deklariert. Da die Enumeratoren in den einschließenden Bereich exportiert werden, wird angenommen, dass sie über einen globalen Gültigkeitsbereich verfügen. Die Bezeichner im Beispiel sind bereits im globalen Gültigkeitsbereich definiert.

Betrachten Sie folgenden Code:

const int Spades = 1, Clubs = 2, Hearts = 3, Diamonds = 4;
enum Suits
{
    Spades = Spades,     // error
    Clubs,               // error
    Hearts,              // error
    Diamonds             // error
};

Da die Bezeichner im vorangehenden Code bereits im globalen Gültigkeitsbereich definiert sind, wird eine Fehlermeldung generiert.

Hinweis

Das Verwenden desselben Namens zum Verweisen auf mehr als ein Programmelement, beispielsweise auf einen Enumerator und ein Objekt, wird als schlechte Programmiermethode betrachtet und sollte vermieden werden.Im vorherigen Beispiel verursacht diese Vorgehensweise einen Fehler.

Siehe auch

Referenz

Gültigkeitsbereich