Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
niet-draagbaar gebruik van klasse 'type' als argument voor een variantische functie
Opmerkingen
Klassen of structs die worden doorgegeven aan een variantische functie, moeten trivially kopieerbaar zijn. Bij het doorgeven van dergelijke objecten maakt de compiler gewoon een bitsgewijze kopie en roept de constructor of destructor niet aan.
Deze waarschuwing is beschikbaar vanaf Visual Studio 2017.
Example
In het volgende voorbeeld wordt C4840 gegenereerd en ziet u hoe u dit kunt oplossen:
// 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));
}
Voor tekenreeksen die zijn gebouwd en beheerd met behulp CStringWvan, moet de opgegeven operator LPCWSTR() worden gebruikt om een CStringW object te casten naar de tekenreeks in C-stijl die wordt verwacht door de notatietekenreeks:
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));