Поделиться через


Ошибка компилятора C3446

Class: инициализатор элементов по умолчанию не допускается для члена класса значений.

Замечания

В Visual Studio 2015 и более ранних версиях компилятор допускал (но игнорировал) инициализатор членов по умолчанию для члена класса значений. Инициализатор по умолчанию для класса значений всегда инициализирует члены нулевым значением. Конструктор по умолчанию не допускается. В Visual Studio 2017 инициализаторы членов по умолчанию вызывают ошибку компилятора, как показано в следующем примере:

Пример

В следующем примере создается C3446 в Visual Studio 2017 и более поздних версиях:

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

Чтобы исправить ошибку, удалите инициализатор:

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