Erro do compilador C3446
“classe”: um inicializador de membro padrão não é permitido para um membro de uma classe de valor
No Visual Studio 2015 e nas versões anteriores, o compilador permitia (mas ignorava) um inicializador de membro padrão para um membro de uma classe de valor. A inicialização padrão de uma classe de valor sempre inicializa os membros em zero; um construtor padrão não é permitido. No Visual Studio 2017, os inicializadores de membro padrão geram um erro de compilador, conforme mostrado neste exemplo:
Exemplo
O exemplo a seguir gera o erro C3446 no Visual Studio 2017 e posterior:
// 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
};
Para corrigir o erro, remova o inicializador:
// C3446b.cpp
value struct V
{
int i;
int j;
};