Teilen über


Compilerfehler C3446

class“: Ein Standardmemberinitialisierer ist für einen Member einer Wertklasse nicht zulässig

Bemerkungen

In Visual Studio 2015 und früher, ließ der Compiler einen Standardmember-Initialisierer für einen Member einer Wertklasse zu, ignorierte diesen aber. Standardinitialisierung einer Wertklasse initialisiert die Elemente immer auf null; ein Standardkonstruktor ist nicht zulässig. In Visual Studio 2017 lösen Standardmember-Initialisierer einen Compilerfehler aus, wie im folgenden Beispiel gezeigt:

Beispiel

Im folgenden Beispiel wird C3446 in Visual Studio 2017 und höher generiert:

// C3446.cpp
value struct V
{
       int i = 0; // error C3446: 'V::i': a default member initializer
                  // is not allowed for a member of a value class
       int j {0}; // C3446
};

Um den Fehler zu beheben, entfernen Sie den Initialisierer:

// C3446b.cpp
value struct V
{
       int i;
       int j;
};