çocuk sınıfta sanal yöntemi çağırmak ++. B sınıfında inner->doSomething()
'u aramak için ne yapmalıyım?C i aşağıdaki sınıfları
şimdiden teşekkürler.
çocuk sınıfta sanal yöntemi çağırmak ++. B sınıfında inner->doSomething()
'u aramak için ne yapmalıyım?C i aşağıdaki sınıfları
şimdiden teşekkürler.
İç öğenin açık bir şekilde başlatılması olmadan, her ikisinin de NULL olmaması ve geçersiz belleğe yönlendirilmesi mümkündür. Bize içsel olarak inaktif olan kodu gösterebilir misin?
A için uygun bir yapıcı ... Aşağıdaki
protected:
A() : inner(NULL) {
...
}
JaredPar'ın önerisine alternatif olarak, yapıcıda şunu belirtin: inner = NULL. Alt sınıfın doSomething() içine breakpoint yerleştirin ve iç değerini gözlemlemek? – Calyth
başlatılamadı, beklediğimden NULL ve if ifadesi yanlış olur. Bir nesnenin hem NULL olmayan hem de geçersiz belleğe işaret etmesinin mümkün olacağını bilmiyordum. Ben sadece yaptım = B Bütçede NULL ve sorunu çözdü. çok teşekkür ederim. – marcosbeirigo
DİKKAT: tüm standart tipler için (imleçler, int, float, vs ... yerleşik tipler de denir), değişken inşa edildiğinde başlatılmaz ('Varsayılan Oluşturucu' yoktur). 'İçsel' A'nın bir özelliği olduğundan, A'nın kurucusunun onu başlatması sorumluluğu vardır, aksi takdirde her çocuk sınıfında probleminiz olur ... –
B Eğer bir yığın taşması alırsınız bu işaretçi başlatıldı aynı olacak şekilde A * atarsanız olsa olurdu Herhangi nedeni İçine mi ihtiyacınız var? A :: DoSomething() 'i çağırmaz mısın?
İç kısım kullanırken bir segfault alırsanız, büyük olasılıkla geçerli bir nesneyi işaret etmemesi olasıdır. İç B'yi nasıl başlatırsınız? –
Her A bir A * içerir. Gerçekten mi? Niye ya? –
Tamam, birbirlerine bakıyorlar. Sadece kontrol etmek istedim. –