Hatalar, hatalar, sorular - sayfa 2327

 
Alexey Navoykov :

Temel sınıfın dolaylı olarak türetilmiş sınıfa aktarılması hatası neden MQL'de hala düzeltilmedi? Derleyici uyarısı bile yok!

Muhtemelen bu doğru tasarım nedeniyle

 class A {  };

class B : public A { };

A * a;

B* b= a;   // Нет ошибки

seninkini hesaba katmadı

 
fxsaber :

Muhtemelen bu doğru tasarım nedeniyle

seninkini hesaba katmadı

Bu tamamen aynı yanlış tasarım.
 
Alexey Navoykov :
Bu tamamen aynı yanlış tasarım.

Temel sınıfın işaretçisini türetilmiş bir nesne takip ediyorsa, bu harika bir yapıdır.

 
fxsaber :

Temel sınıfın işaretçisini türetilmiş bir nesne takip ediyorsa, bu harika bir yapıdır.

Tartışmamayı, sadece bunun bir hata olduğuna inanmayı öneriyorum.
 
Alexey Navoykov :
Tartışmamayı, sadece bunun bir hata olduğuna inanmayı öneriyorum.

Bu fiil teknik bir forumda pek uygulanamaz. Denenmiş C++

 class A {  };

class B : public A { };

A* a = new B;

B* b= dynamic_cast <B*>(a); // cannot dynamic_cast ‘a’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
B* b1= a; // invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]

Seçeneklerin hiçbiri işe yaramadı. Nedenleri net değil.

 
Koldun Zloy :

Bunları birbirinin yerine kullanılabilir hale getirirseniz, ikisine de ihtiyaç kalmaz.

C++'da bu mümkündür:

Yarın uygulanabilecek (10 yıl içinde değil) ve C++ ile harici bir benzerliği olacak en basit seçeneği önerdim (aksi halde neden herhangi bir şeyi değiştirelim). Ayrıca, operatör*() yapılmadıysa ve yapılmayacaksa (forumda bununla ilgili bilgiler vardı), operatör->()'nin neden aniden uygulanacağı açık değil (aynı sıradalar)

 
Alexey Navoykov :

Temel sınıfın dolaylı olarak türetilmiş sınıfa aktarılması hatası neden MQL'de hala düzeltilmedi? Derleyici uyarısı bile yok!

Derleme hatası mı bekliyorsunuz? bu yüzden olmamalı, çünkü bu durumda dynamic_cast
 
TheXpert :
Derleme hatası mı bekliyorsunuz? bu yüzden olmamalı, çünkü bu durumda dynamic_cast
Yukarıya bakın, fxsaber C++ kodunu sağladı.
 
Alexey Navoykov :
Yukarıya bakın, fxsaber C++ kodunu sağladı.

derler

 class A 
{ 
public :
     virtual ~A() = default ; 
};

class B : public A { };

int main( void )
{
    A* a = new B;
    B* b= dynamic_cast <B*>(a);
     return 0 ;
}
 
TheXpert :

derler

dikkatsizsin
Neden: