Freigeben über


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)
}