Compilerwarnung (Ebene 1) C4407
Umwandlung zwischen verschiedenen Zeigern auf Memberdarstellungen, Compiler generiert möglicherweise falschen Code
Es wurde eine falsche Umwandlung zwischen Zeiger-zu-Member-Typen erkannt.
Hinweise
C4407 kann aufgrund der In Visual Studio 2005 durchgeführten Compilerkonformität generiert werden. Zeiger-zu-Member erfordert jetzt einen qualifizierten Namen und die Adresse des Operators (&).
C4407 kann auftreten, wenn Sie zwischen einem mehrfachen Vererbungspunkt-zu-Member zu einem einzelnen Vererbungspunkt-zu-Element umwandeln. Manchmal kann dies funktionieren, aber manchmal kann dies nicht der Fall sein, weil die einzelne Vererbungspunkt-zu-Member-Darstellung keine ausreichenden Informationen enthält. Kompilieren mit den /vmm
eventuellen Hilfen. Weitere Informationen finden Sie unter /vmm
, , /vms
( /vmv
Allgemeine Darstellung). Sie können auch versuchen, Ihre Basisklassen neu anzuordnen; Der Compiler erkennt einen Verlust von Informationen in der Konvertierung, da eine Basisklasse einen Ungleich-Null-Offset vom abgeleiteten Objekt aufweist.
Beispiel
Im folgenden Beispiel wird C4407 generiert und veranschaulicht, wie Sie es beheben können:
// C4407.cpp
// compile with: /W1 /c
struct C1 {};
struct C2 {};
struct C3 : C1, C2 {};
typedef void(C3::*PMF_C3)();
typedef void(C2::*PMF_C2)();
PMF_C2 f1(PMF_C3 pmf) {
return (PMF_C2)pmf; // C4407, change type of cast,
// or reverse base class inheritance of C3 (i.e. : C2, C1)
}