Hatalar, hatalar, sorular - sayfa 2679

 
fxsaber :

2365 - kod hatalarla dolu. Bunu çözecek zaman yoktu. 2361'e geri alındı - normal. mq4'te - aynı durum.

Mesaj için teşekkürler, kontrol edeceğim

 
MT5'in yeni bir sürümünü indirdim (derleme 2365), ne yazık ki bir şeyler ters gitti,
temel sınıf yapıcısını çağırırken parametreleri geçirmede benzer.
 
Sergey Dzyublik :
MT5 hatası (build 2365) Atama işlecini kullanarak sınıf oluşturucusunu dolaylı olarak çağırırken, bir işaretçiyi referansla iletirken , yapıcı argümanı olarak kullanılan derleme hatası.
Referansla geçen işaretçi, değer ile değiştirilirse, her şey çalışır.

Gönderdiğiniz için teşekkürler, düzeltildi

 

Şablon sınıfının şablon parametresi temel sınıf olarak kullanıldığında temel sınıf oluşturucusu çağrılırken MT5 hatası (derleme 2365) derleme hatası.
MT5'te (yapı 2363) hiçbir sorun yoktu.

 class B;

template < typename T>
class A : public T{
public :
   A() : T(){}   // 'B' - identifier expected
};


class B{};

void OnStart (){
   A<B> a;
};
 
Ilyas :
Nesneler için ArrayResize'ın daha hızlı çalışmaya başladığı görülebilir.
Bir kez daha, ArrayResize işlevinin parçalarından birinin karmaşıklığı logaritmadan sıfıra düşürüldü.

Ayrılmış bellek için ArrayResize'ı hızlandırdığınız için çok teşekkür ederiz.
MT5 (build 2365) gerçek bir projede, std::vector::push_back'in hızı önceki derlemeye göre 1,5 kat daha hızlı hale geldi.
Ve std::vector:resize gecikmesi 2,2 kattan 1,45 kata düşürüldü.

 

2366 inşa, bence, sabitler şimdi düzgün çalışmıyor

 class A
{
private :
   int                f1(){ Print ( __FUNCTION__ ); return ( 1 );}
   int                f2(){ Print ( __FUNCTION__ ); return ( 2 );}
public :
   int                func( int v){ const int a = f1(); const int b = f2(); return (a+b+v);}
};

A a1,a2;
//+------------------------------------------------------------------+
void OnStart ()
{
   Print ( "1. " ,a1.func( 1 ));
   Print ( "2. " ,a1.func( 2 ));
   Print ( "3. " ,a2.func( 3 ));
   Print ( "4. " ,a2.func( 4 ));
}
//+------------------------------------------------------------------+

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) on dört

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 2.5

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 3.6

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 4.7

const'ı static ile değiştirirseniz, beklendiği gibi çalışır - a ve b'yi başlatırken bir f1() ve f2() çağrısı

   int                func( int v){ static int a = f1(); static int b = f2(); return (a+b+v);}

2020.03.21 12:58:03.496 tst (EURUSD,H1) bir::f1

2020.03.21 12:58:03.496 tst (EURUSD,H1) bir::f2

2020.03.21 12:58:03.496 tst (EURUSD,H1) on dört

2020.03.21 12:58:03.496 tst (EURUSD,H1) 2.5

2020.03.21 12:58:03.496 tst (EURUSD,H1) 3.6

2020.03.21 12:58:03.496 tst (EURUSD,H1) 4.7

 

böyle bir kod yazarsanız, genellikle yakalanamayan sürekli bir hata

 class A
{
private :
   int                f1() const { static int v1= 1 ; Print ( __FUNCTION__ ); return (v1++);}
   int                f2() const { static int v2= 1 ; Print ( __FUNCTION__ ); return (v2++);}
public :
   int                func( int v){ const int a = f1(); const int b = f2(); return (a+b+v);}
};
 
Igor Makanu :

2366 inşa, bence, sabitler şimdi düzgün çalışmıyor

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) on dört

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 2.5

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 3.6

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f1

2020.03.21 12:55:59.904 tst (EURUSD,H1) bir::f2

2020.03.21 12:55:59.904 tst (EURUSD,H1) 4.7

const'ı static ile değiştirirseniz, beklendiği gibi çalışır - a ve b'yi başlatırken bir f1() ve f2() çağrısı

2020.03.21 12:58:03.496 tst (EURUSD,H1) bir::f1

2020.03.21 12:58:03.496 tst (EURUSD,H1) bir::f2

2020.03.21 12:58:03.496 tst (EURUSD,H1) on dört

2020.03.21 12:58:03.496 tst (EURUSD,H1) 2.5

2020.03.21 12:58:03.496 tst (EURUSD,H1) 3.6

2020.03.21 12:58:03.496 tst (EURUSD,H1) 4.7

Bu tam olarak böyle çalışması gerekiyor.

 
Igor Makanu :

böyle bir kod yazarsanız, genellikle yakalanamayan sürekli bir hata

Burada da her şey doğru.

 
Koldun Zloy :

Bu tam olarak böyle çalışması gerekiyor.

geçen yıl yanlış çalıştı - özel olarak test edilmiş const değiştiricileri

ve görünüşe göre @Ilyas MQL programının nasıl başlatıldığını açıkladı, önce tüm const ve static, nerede tanımlandıklarına bakılmaksızın başlatılır, ardından sınıf kurucuları çağrılır

tamam, bu statik / const başlatma ile - yine de doğru şekilde dağıtılabilir, ancak burada const değiştiricisinin derleyicinin kontrol edeceğini garanti etmediği gerçeği - çok beklenmedik - ikinci örneğim