Kompilatorvarning (nivå 1) C4407

mellan olika pekare till medlemsrepresentationer kan kompilatorn generera felaktig kod

Anmärkningar

En felaktig typkonvertering mellan pekar-typ till medlems-typ upptäcktes.

C4407 kan genereras på grund av kompilatorns efterlevnadsarbete som utfördes i Visual Studio 2005. Pekare till medlem kräver nu ett kvalificerat namn och adress för operatorn (&).

C4407 kan inträffa om du gjuter mellan en flera arvspekare till medlem till en enda arvspekare till medlem. Ibland kan detta fungera, men ibland kan det inte eftersom den enskilda arvspekaren-till-medlem-representationen inte innehåller tillräckligt med information. Kompilering med /vmm kan vara till hjälp. Mer information finns i /vmm, /vms, /vmv (Allmän representationsanvändning). Du kan också prova att ordna om dina basklasser. kompilatorn identifierar en förlust av information i konverteringen eftersom en basklass har en förskjutning som inte är noll från den härledda.

Example

Följande exempel genererar C4407 och visar hur du åtgärdar det:

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