Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
rzutowanie między różnymi wskaźnikami do reprezentacji składowych, kompilator może wygenerować niepoprawny kod
Uwagi
Wykryto niepoprawne rzutowanie między typami wskaźników do składowych.
C4407 można wygenerować ze względu na pracę kompilatora, która została wykonana w programie Visual Studio 2005. Wskaźnik do elementu członkowskiego wymaga teraz kwalifikowanej nazwy i operatora adresu (&).
C4407 może wystąpić, jeśli rzutujesz między wieloma wskaźnikami dziedziczenia do elementu członkowskiego do pojedynczego wskaźnika dziedziczenia do elementu członkowskiego. Czasami może to zadziałać, ale czasami nie może, ponieważ reprezentacja pojedynczego wskaźnika dziedziczenia do elementu członkowskiego nie zawiera wystarczających informacji. Kompilowanie za /vmm pomocą polecenia może pomóc. Aby uzyskać więcej informacji, zobacz /vmm, , /vms/vmv (reprezentacja ogólnego przeznaczenia). Możesz również spróbować zmienić kolejność klas bazowych; kompilator wykrywa utratę informacji w konwersji, ponieważ klasa bazowa jest z przesunięciem niezerowym z pochodnego.
Przykład
Poniższy przykład generuje kod C4407 i pokazuje, jak go naprawić:
// 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)
}