Aracılığıyla paylaş


Derleyici Uyarısı (düzey 1) C4407

üye gösterimlerine farklı işaretçiler arasında atama, derleyici yanlış kod oluşturabilir

İşaretçiden üyeye türler arasında yanlış bir atama algılandı.

Açıklamalar

Visual Studio 2005'te yapılan derleyici uyumluluğu çalışmaları nedeniyle C4407 oluşturulabilir. İşaretçiden üyeye artık bir nitelenmiş ad ve işleç adresi (&) gerekiyor.

C4407, birden çok devralma işaretçisi arasında üyeye tek bir devralma işaretçisi üyesi arasında geçiş yaparsanız oluşabilir. Bazen bu işe yarasa da, bazen tek devralma işaretçisi üye gösterimi yeterli bilgi barındırmadığından işe yaramaz. ile derlemek /vmm yardımcı olabilir. Daha fazla bilgi için bkz /vmm. , /vms, /vmv (Genel amaçlı gösterim). Temel sınıflarınızı yeniden düzenlemeyi de deneyebilirsiniz; bir temel sınıf türetilenden sıfır olmayan bir uzaklıkta olduğundan derleyici dönüştürmedeki bilgi kaybını algılar.

Örnek

Aşağıdaki örnek C4407 oluşturur ve nasıl düzeltileceğini gösterir:

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