Hatalar, hatalar, sorular - sayfa 1889

 

Bu bir hata mı yoksa bir şey mi anlamadım? normal bir parabolik Uzman Danışman, bir satın alma durumunda, spread'i dikkate alarak son noktada bir durdurma emri verir.
Ve şimdi fiyat (Ask) 57781 emrinin fiyatına ulaştı ama emir açılmadı.

 
çalışma zamanı hatası nedir
 class CLASS1
{
public :
   int i;  
};

class CLASS2 : public CLASS1 {};

void OnStart ()
{
  CLASS1 Object;
  CLASS2* Ptr = dynamic_cast <CLASS2*>(&Object);
  
  Ptr.i = 1 ;
}
 

şöyle yaparsanız:

 class CLASS1
{
public :
   int i;  
};

class CLASS2 : public CLASS1 {};

void OnStart ()
{
   CLASS2 Object;
   CLASS1 * Ptr = dynamic_cast < CLASS1 *>(&Object);
  
  Ptr.i = 1 ;
}

onlar. ebeveyne atılırsa, her şey yolunda gider, görünüşe göre dilin yapısında çok önemli değişiklikler meydana geldi ve şimdi türetilmiş tür kesinlikle bir ata türü değil.

C++ ile kontrol edildi:

 class CLASS1
{
public :
   int i;  
};

class CLASS2 : public CLASS1 {};

void OnStart ()
{
  CLASS1* Object = new CLASS1();
  CLASS2* Ptr = (CLASS2 *)&Object;
  
  Ptr->i = 1 ;
}

ana sınıfın bir nesnesini türetilmiş sınıfın türüne dönüştürmek doğru şekilde işlenir, yani. MQL5 mekanizmasında tip döküm ile bir tür hata, tabii ki bu şekilde tasarlanmadıysa.

 

dynamic_cast'in ne döndürdüğünü kontrol etmezseniz, onu kullanmak bir anlam ifade etmez.

 
Konstantin :

şöyle yaparsanız:

onlar. ebeveyne atılırsa, her şey yolunda gider, görünüşe göre dilin yapısında çok önemli değişiklikler meydana geldi ve şimdi türetilmiş tür kesinlikle bir ata türü değil.

Bir ebeveyne yayın yapmak, klasik olarak, dynamic_cast olmadan bile MQL'de her zaman işe yaramıştır. Belki de dynamic_cast'in anlamını anlamıyorum. Belgelerdeki örneğe göre, muhtemelen anlamını anlamadım. Kim açıklayacaktı.
 
Koldun Zloy :

dynamic_cast'in ne döndürdüğünü kontrol etmezseniz, onu kullanmak bir anlam ifade etmez.

Teşekkürler, örneğimde NULL döndürür. Bu neden oluyor?

Bu özelliğin kullanımına ilişkin pratik bir örnek verebilir misiniz?


Geliştiriciler bunu yalnızca Graphic.mqh'de böyle kullanır

      curve= dynamic_cast <CCurve*>(m_arr_curves.At(i));

       if ( CheckPointer (curve)!= POINTER_DYNAMIC )
         return ( false );

Aynı zamanda, bu tür sınıf / nesne tanımlarına sahiptirler.

 class CCurve : public CObject

CObject          *At( const int index) const ;

Onlar. ebeveyn işaretçisini çocuğa atarlar. Benim örneğimde, yaptığım tam olarak bu! Sıkıntı nerede?

 

Bir üst sınıfa yönelik bir işaretçi, aslında bir alt sınıfa yönelik bir işaretçi içerebilir.

 class Class1
{
};

class Class2 : public Class1
{
};


Class1* a = new Class2();

Class2* b = dynamic_cast < Class2* >( a );

// b != NULL
 
Koldun Zloy :

Bir üst sınıfa yönelik bir işaretçi, aslında bir alt sınıfa yönelik bir işaretçi içerebilir.

Teşekkürler, girdim!
 
fxsaber :
Teşekkürler, girdim!

ama hala MQL'de varis sınıfının bir işaretçisinin türüne bir işaretçi atamanın neden imkansız olduğunu anlamıyorum, ancak C++'da bu mümkün, lütfen açıklayın bu MQL'de bir hata mı yoksa olması mı gerekiyor? Böyle olması?

 
Konstantin :

C++'da mümkün, lütfen açıklayın MQL'de bir hata mı yoksa böyle mi olması gerekiyor?

C++'da bu, yalnızca temel sınıfın işaretçisi bir çocuğu işaret ediyorsa mümkündür.