Derleyici Uyarısı (düzey 1) C4436
Oluşturucuda veya yıkıcıda 'class1' sanal tabanından 'class2' öğesine dynamic_cast kısmen oluşturulmuş nesneyle başarısız olabilir /vd2 ile derleme veya etkin #pragma vtordisp(2) ile 'class2' tanımlama
Derleyici aşağıdaki özelliklere sahip bir dynamic_cast
işlemle karşılaştı.
Atama, temel sınıf işaretçisinden türetilmiş bir sınıf işaretçisine kadardır.
Türetilmiş sınıf, temel sınıfı sanal olarak devralır.
Türetilmiş sınıfın sanal taban için bir
vtordisp
alanı yok.Atama, türetilmiş sınıfın oluşturucusunda veya yok edicisinde ya da türetilmiş sınıftan daha fazla devralan bir sınıfta bulunur.
Uyarı, kısmen oluşturulduğunda bir nesne üzerinde çalışıyorsa doğru çalışmayabileceğini gösterir dynamic_cast
. Bu durum, türetilmiş oluşturucu/yıkıcı başka türetilmiş bir nesnenin alt nesnesi üzerinde çalışıyorsa gerçekleşir. Uyarıda adlı türetilmiş sınıf hiçbir zaman daha fazla türetilmezse, uyarı yoksayılabilir.
Örnek
Aşağıdaki örnek C4436 oluşturur ve eksik vtordisp
alandan kaynaklanan kod oluşturma sorununu gösterir.
// C4436.cpp
// To see the warning and runtime assert, compile with: /W1
// To eliminate the warning and assert, compile with: /W1 /vd2
// or compile with: /W1 /DFIX
#include <cassert>
struct A
{
public:
virtual ~A() {}
};
#if defined(FIX)
#pragma vtordisp(push, 2)
#endif
struct B : virtual A
{
B()
{
A* a = static_cast<A*>(this);
B* b = dynamic_cast<B*>(a); // C4436
assert(this == b); // assert unless compiled with /vd2
}
};
#if defined(FIX)
#pragma vtordisp(pop)
#endif
struct C : B
{
int i;
};
int main()
{
C c;
}
Ayrıca bkz.
dynamic_cast İşleci
vtordisp
Derleyici Uyarısı (düzey 4) C4437
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin