Compartilhar via


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