共用方式為


編譯器警告 (層級 1) C4407

在不同的成員指標表示法間進行轉換,可能導致編譯器產生不正確的程式碼

偵測到指針對成員類型之間的轉換不正確。

備註

由於在 Visual Studio 2005 中完成的編譯程式一致性工作,因此可以產生 C4407。 指針對成員現在需要限定的名稱和運算子位址(&)。

如果您將多個繼承指標轉換成單一繼承指標到成員之間,可能會發生 C4407。 有時候,這可以運作,但有時無法,因為單一繼承指針對成員表示法沒有足夠資訊。 使用 /vmm 進行編譯可能會有所説明。 如需詳細資訊,請參閱/vmm/vms/vmv (一般用途表示法) 。 您也可以嘗試重新排列基類;編譯程式正在偵測轉換中的資訊遺失,因為基類位於衍生的非零位移。

範例

下列範例會產生 C4407,並示範如何修正此問題:

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