Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
a "type" osztály nem hordozható használata variadikus függvény argumentumaként
Megjegyzések
A variadikus függvénynek átadott osztályoknak vagy szerkezeteknek triviálisan másolhatónak kell lenniük. Az ilyen objektumok átadásakor a fordító egyszerűen egy bitenkénti másolatot készít, és nem hívja meg a konstruktort vagy a destruktort.
Ez a figyelmeztetés a Visual Studio 2017-től érhető el.
Example
Az alábbi példa létrehozza a C4840-et, és bemutatja, hogyan lehet kijavítani:
// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>
int main()
{
struct S {
S(int i) : i(i) {}
S(const S& other) : i(other.i) {}
operator int() { return i; }
private:
int i;
} s(0);
printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
// as an argument to a variadic function
// To correct the error, you can perform a static cast
// to convert the object before passing it:
printf("%i\n", static_cast<int>(s));
}
A használatával CStringWlétrehozott és felügyelt sztringek esetében a megadott operator LPCWSTR() értéket kell használni egy objektum formázási sztring CStringW által várt C stílusú sztringmutatóra való vetéséhez:
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));