Hatalar, hatalar, sorular - sayfa 2473

 
Sergey Dzyublik :


Şu anda, bir şablon sınıfı içinde bildirilen statik bir değişkeni kullanmak mümkün değildir.
Ad alanının tanıtılmasıyla bu sınırlama atlanabilir mi?

Evet yapabilirsin.

Kod biraz farklı olacak, daha doğru, işte bir örnek:

 //+------------------------------------------------------------------+
//|                                                  ScopeSample.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
class A
  {
public :
   struct Item
     {
      T                 value;
      
      Item(T initial= 10 ):value(initial) { Print ( __FUNCSIG__ ); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
class B
  {
public :
   struct Item
     {
      T                 value;
      
      Item(T initial= 100 ):value(initial) { Print ( __FUNCSIG__ ); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
A::Item A::s_default;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
B::Item B::s_default;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   Print (A< int >::s_default.value);
   Print (B< int >::s_default.value);
  }
//+------------------------------------------------------------------+


Sonuç:

 2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) A< int >::Item::Item( int )
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) B< int >::Item::Item( int )
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) 10
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) 100
 
Çok güzel, çok teşekkürler.
Ad alanı desteğiyle MT'ye alfa erişimi elde etmek mümkün müdür?
Gerçekten de çalışmanın bir parçası olarak bir "akıllı kapsayıcı" yazmak, bug/zafiyet aramamak vs. gerekli.
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Sergey Dzyublik , 2019.05.23 13:52

Son zamanlarda, MT'deki bir düzine çalışma "özelliği" ve hata hakkında bilgi verildi.
Düzeltilmesi gerekip gerekmediğini nasıl anlarsınız?
Lütfen her yeni yapı yayınlandığında her şeyi test etmeyi teklif etmeyin.

(MT5(build 2059)) "(void*)(NULL) parametresini şablon işlevine geçirirken derleme hatası"".
(MT5(build 2059)'da düzeltildi) "Strateji test cihazı: planlanan 2 geçiş, ancak uygulamada "OnInit kritik hatası" hatası nedeniyle sonsuz sayıda geçiş > 900 adet".
(MT5(build 2059)'da sabit değil) "Dinamik dizilere sahip yapılar için varsayılan atama operatörünün çalışmasının bir parçası olarak dizi boyutu alanının yanlış değeri."
(MT5(build 2059)'da sabit değil) "Derleyici, bir işlevden değere göre bir sınıf nesnesi döndürürken varsayılan sınıf kopya oluşturucusunu görmez."
ve (MT5(build 2059)'da düzeltildi) "Şablon sınıfları ve "karmaşık" yapılar için "kendine" tip dökümü yapılırken derleme hatası."
(MT5(build 2059)'da sabit değil) "Bir typedef ile çalışırken, açık bir uzmanlığa sahip bir şablon işlevi kullanmak, şablon işlev kodunun oluşturulmasına neden olmaz."
(MT5(build 2059)'da düzeltilmedi) "Bir typedef içinde aynı işlev imzasını yeniden kullanırken derleme hatası ".
(MT5'te sabit değil(build 2059)) "Bir çok dize işleme işlevi, bir dizedeki NULL karakterlerle çalışmıyor (örn: ShortArrayToString, StringInit, StringFill)".
(MT5(build 2059)'da sabit değil) "StringSetLength işlevi yalnızca dizenin uzunluğunu "kesme" yönünde çalışır, ancak artırmaz."
  (MT5'te düzeltildi(build 2057)) "Strateji test cihazı: 750 "metatester64.exe" işlemini başlat".
"Forum www.mql5.com, resimli bir mesajı düzenlerken, önceki resim yenisiyle değiştirilmez."


Teklifler:
"Kullanıcıya varsayılan olarak atama operatörü (kopyalama oluşturucu) için kod oluşturmaya/kaldırmaya zorlama yeteneği verin."
"ArrayCopy işlevlerinin sınıfları ve "karmaşık" yapıları kopyalamasına izin verin, tıpkı yapıların herhangi bir nesne türü için derin kopyalama işlevi sağlaması gibi."
"Dinamik dizilerle çalışırken kullanıcıya Kapasite değerini okuma/ayarlama işlevi verin"

""Sinyaller" hizmetinin bilgi grafiklerini iyileştirmeye yönelik değişiklikler"


 

Bugün, vadeli işlem piyasasının gerçek hesabındaki kene geçmişi, Otkritie komisyoncusu, terminalimde indirilmiyor.

Camdaki veriler değişir.

Şimdi 24.05.2019 23:40

Terminaldeki son tik 23.05.2019 içindir.


Benim işlem yaptığım enstrümanlar da dahil olmak üzere diğer bazı enstrümanlar için de durum aynı.

İkinci terminalde (ayrı kurulum), aynı komisyoncuya ait başka bir hesapta, etki aynıdır.

 
Söyleyin bana, Expert Advisor'ın optimizasyon modunda mı yoksa tekli test modunda mı çalıştığını belirlemek mümkün mü?
 
MT5 (yapı 2059)
(void*)(NULL) parametresini şablon işlevine geçirirken derleme hatası:
 class C{
public :
   template < typename T>
   static void func(T ){
       Print ( __FUNCSIG__ );
   }
};


void OnStart (){  
   void * c_ptr = new C();
   
   C::func((C*) NULL );     // Ok
   C::func(c_ptr);        // Ok
   C::func(( void *) NULL );   // 'void' - illegal use of 'void' type
   
   delete c_ptr;
}
Her şey çalıştı (2057'yi inşa etti), belki de düzeltmenin bir parçası olarak bir şeyler ters gitti:
ve   "Şablon sınıfları ve "karmaşık" yapılar için "kendi kendine" tür dökümü yaparken derleme hatası."
 
Belki de, C++ ile benzer şekilde, "tam" bir boş gösterici - nullptr kullanmak mantıklıdır?
 

2056'ya geri döndüğünüzde her şey yolunda gitti. Ve 2059'da - zaten bir derleme hatası:

 void OnStart ()
{
class A {};
//#define void  A //(*)
         const void *p1;
               void *p2 = ( void *)p1; //Error: 'void' - class type expected
}

Ve boşluk A (*) ile değiştirilirse, her şey yolunda demektir. Fark ne?

Ayrıca, bu durumda bile bir derleme hatası oluşur:

              void *p2 = ( void *)p1; //Error: 'void' - class type expected
 

2059x32 derleme komutunda derlerken, soyut bir hata:

ancak IDE aracılığıyla çoğaltılmaz - belki bir kaza

 
A100 :

Şablonlar ve void* arasında nasıl seçim yaparsınız?