Condividi tramite


Errore del compilatore C3446

'class': un inizializzatore di membro predefinito non è consentito per un membro di una classe valore

In Visual Studio 2015 e versioni precedenti il compilatore consentiva, ma ignorava, un inizializzatore di membro predefinito per un membro di una classe di valori. L'inizializzazione predefinita di una classe di valori inizializza sempre a zero i membri e un costruttore predefinito non è consentito. In Visual Studio 2017 gli inizializzatori di membri predefiniti generano un errore del compilatore, come illustra l'esempio seguente:

Esempio

L'esempio seguente genera l'errore C3446 in Visual Studio 2017 e versioni successive:

// 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
};

Per correggere l'errore, rimuovere l'inizializzatore:

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