Megosztás a következőn keresztül:


C3445-ös fordítási hiba

A(z) "type" másolási listás inicializálásához nem használható explicit konstruktor.

Megjegyzések

Az ISO C++17 szabvány szerint a fordítónak explicit konstruktort kell figyelembe vennie a másoláslista-inicializálás túlterhelésének feloldásához, de hibát kell okoznia, ha a túlterhelést ténylegesen választják.

A Visual Studio 2017-től kezdve a fordító az objektumlétrehozással kapcsolatos hibákat találja meg, amelyeket a Visual Studio 2015 nem talált, egy inicializálási lista használatával. Ezek a hibák futásidőben összeomlásokhoz vagy nem definiált viselkedéshez vezethetnek.

Example

Az alábbi példa C3445-öt hoz létre.

// C3445.cpp
struct A
{
    explicit A(int) {}
    A(double) {}
};

int main()
{
    A a1 = { 1 };     // error C3445: copy-list-initialization of
                      //     'A' cannot use an explicit constructor
}

A hiba kijavításához használja inkább a közvetlen inicializálást:

// C3445b.cpp
struct A
{
    explicit A(int) {}
    A(double) {}
};

int main()
{
    A a1{ 1 };
}