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


C2338 fordítóhiba

Hibaüzenet

Megjegyzések

A C2338 hibát a fordítás során fellépő static_assert hiba okozhatja. Az üzenetet a static_assert paraméterek adják meg.

A C2338 hibát külső szolgáltatók is létrehozhatják a fordítóban. A legtöbb esetben ezeket a hibákat egy attribútumszolgáltató DLL-je, például az ATLPROV jelenti. Az üzenet néhány gyakori formája a következő:

  • "attribútum" Atl attribútumszolgáltató: hibaATL-számüzenet

  • Az attribútum helytelen használata

  • "használat": a "usage" attribútum helytelen formátuma

Ezek a hibák gyakran helyreállíthatatlanok, és végzetes fordítóhibát követhetnek.

A problémák megoldásához javítsa ki az attribútumhasználatot. Bizonyos esetekben például az attribútumparamétereket deklarálni kell a használatuk előtt. Ha meg van adva egy ATL-hibaszám, részletesebb információkért tekintse meg a hiba dokumentációját.

Example

A Standard C++11 és újabb constexpr verziókban a függvények alapértelmezés szerint nem lesznek figyelembe véve noexcept , ha állandó kifejezésben használják őket. Ez a viselkedésváltozás a Core Working Group (CWG) CWG 1351 megoldásából származik, és módban engedélyezve /permissive- van. Az alábbi példa a Visual Studio 2019 16.1-es és korábbi verziójában áll össze, de a C2338-at a Visual Studio 2019 16.2-es verziójában állítja elő:

// c2338.cpp
// Compile using: cl /EHsc /W4 /permissive- c2338.cpp
constexpr int f() { return 0; }

int main() {
    static_assert(noexcept(f()), "f should be noexcept"); // C2338 in 16.2
}

A hiba kijavításához adja hozzá a kifejezést a noexcept függvénydeklarációhoz:

// c2338_fixed.cpp
// Compile using: cl /EHsc /W4 /permissive- c2338_fixed.cpp
constexpr int f() noexcept { return 0; }

int main() {
    static_assert(noexcept(f()), "f should be noexcept");
}