Kompilatorfel C3446

"klass": en standardmedleminitierare tillåts inte för en medlem i en värdeklass

Anmärkningar

I Visual Studio 2015 och tidigare tillät kompilatorn (men ignorerade) en standardmedleminitierare för en medlem i en värdeklass. Standardinitiering av en värdeklass nollinitierar alltid medlemmarna. en standardkonstruktor tillåts inte. I Visual Studio 2017 skapar standardmedlemsinitierare ett kompilatorfel, vilket visas i det här exemplet:

Example

I följande exempel genereras C3446 i Visual Studio 2017 och senare:

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

Åtgärda felet genom att ta bort initieraren:

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