Bagikan melalui


Compiler Warning (level 1) C4407

transmisi antara pointer yang berbeda ke representasi anggota, pengkompilasi dapat menghasilkan kode yang salah

Transmisi yang salah antara jenis pointer-to-member terdeteksi.

Keterangan

C4407 dapat dihasilkan karena pekerjaan kesesuaian kompilator yang dilakukan di Visual Studio 2005. Pointer-to-member sekarang memerlukan nama yang memenuhi syarat dan alamat operator (&).

C4407 dapat terjadi jika Anda melemparkan antara beberapa pointer-to-member warisan ke satu pointer-to-member warisan. Terkadang ini dapat berfungsi, tetapi kadang-kadang tidak dapat karena representasi pointer-to-member warisan tunggal tidak menyimpan informasi yang memadai. Mengkompilasi dengan bantuan mungkin /vmm . Untuk informasi selengkapnya, lihat /vmm, , /vmv/vms(Representasi tujuan umum). Anda juga dapat mencoba mengatur ulang kelas dasar Anda; pengkompilasi mendeteksi hilangnya informasi dalam konversi karena kelas dasar berada pada offset bukan nol dari turunannya.

Contoh

Sampel berikut menghasilkan C4407 dan menunjukkan cara memperbaikinya:

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