Hatalar, hatalar, sorular - sayfa 2670

 

Test cihazı hatası (peki, ya da bir şeyi anlamayı bıraktım)

Test cihazında kayıp anlaşma karı

 

Daha önce açıklanan hatayla başka bir karşılaşma - "Tanımsız Davranış, dahili bir "C" türüyle birkaç kez sarılmış karmaşık bir nesne oluşturuyorsunuz ve orada tamamen farklı bir veri türü olduğu ortaya çıkıyor, belki "B", belki "int" , ne istersen ...".
Aslında, gün yerelleştirme, çoğaltma ve geçici çözümler aramak için harcandı, ne yazık ki hepsi boşuna...
Sahte şablon parametresi kullanmak için önceden önerilen geçici çözümün aşağıdaki örnek için çalışmadığı ortaya çıktı.

 template < typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template < typename _Tp>
class A_g{
public :
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template < typename _Tp>
class V{
public :
   struct It : public   A_g<_Tp>::It{};
   It b;
};

template < typename _Tp>
class Opt_g{
   template < typename _It>
   static void test(_It &it){      
       printf ( typename (_Tp));          // int
       printf ( typename (it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template < typename T>
class GetStructType{
public :
   struct type : public T{};
};

template < typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart (){ 
   V< int > v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V< int >::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

Çalışan tek çözüm, "kendi kendine yapılan" otomatik tip kullanılarak elde edildi, ancak gerçek kodun hızında sıfır kârla derlemenin vahşi maliyetleri var ...
Lütfen yardım edin, belki birinin bunu nasıl aşacağına dair bir fikri vardır.

 
Alexey Klenov :

Test cihazı hatası (peki, ya da bir şeyi anlamayı bıraktım)

Mimari nedenlerle, görselleştirici her zaman mevcut durumu göstermez.

 
fxsaber :

Mimari nedenlerle, görselleştirici her zaman mevcut durumu göstermez.

Teşekkürler, aklımda tutacağım.
 

Şablon işlevi/sınıf önbelleğinin çalışmasındaki kusurlar:
( MT5(build 2361 tarafından sabitlenmedi )) *** ( yukarı ) Tanımsız Davranış, "C" dahili tipine sahip karmaşık, çoklu sarılmış bir nesne yaratırsınız ve orada tamamen farklı bir veri tipi olduğu ortaya çıkar, belki "B" ", belki "int", isteyen...
(MT5(build 2361) tarafından düzeltilmedi ) * Derleme Hatası, fonksiyon işaretçi argümanını const ref şablonu olarak geçirirken oluşan hata.
( MT5(build 2361 tarafından düzeltilmedi )) * Derleme Hatası, bir B<int> nesnesi bir B<void*> nesnesinden sonra oluşturulabilir, ancak daha önce yapılırsa bir derleme hatası oluşur.


Şablon işlevinin/sınıfının çalışmasındaki kusurlar:
( MT5(build 2361 tarafından düzeltilmedi )) *** ( yukarı ) Derleme Hatası, şablon işlevi içinde hata, açık döküm işleminin bir parçası olarak geçirilen işaretçi, diğer durumlarda bir sınıf gibi davranır - bir işaretçi gibi.
(MT5(build 2361) tarafından düzeltilmedi ) ** Derleme Hatası, dahili sınıf kullanılırken şablon sınıfı kod oluşturma hatası.
(MT5(build 2361) tarafından düzeltilmedi ) ** Derleme Hatası, bir şablon işlevinin şablon parametresi için dahili sınıfa erişmeye çalışırken oluşan hata.
(MT5(build 2361) tarafından düzeltilmedi ) * Derleme Hatası, bir şablon yöntemi/sınıfı oluşturulurken oluşan hata, bir şablon parametresinin "otomatik değiştirme" süreci, ana program kodunun kapsamını aşıyor.
(MT5(build 2361) tarafından düzeltilmedi ) * Derleme Hatası, şablon sınıfı şablon yöntemi için dönüş değeri olarak hareket ettiğinde şablon sınıfı kodunun otomatik olarak üretilmemesi hatası.
(MT5(build 2361 tarafından düzeltilmedi )) * Derleme Hatası, bir dahili yapıyı bir şablon işlevine geçirirken oluşan hata, elde edilen veri türü , şablon sınıfındaki başka bir dahili yapı için temel veri türü olarak kullanılamaz.
(MT5(build 2361) tarafından düzeltilmedi ) * Derleme Hatası, çağrı aşırı yüklenmiş şablon olmayan bir işlevden yapıldığında açık argüman türleri ile bir şablon işlevi çağrılırken oluşan hata.

( MT5(build 2361 tarafından düzeltilmedi )) Derleme Hatası, dahili sınıf tanımlanırken hata - temel sınıf belirtilirken genel ad alanına açıkça başvurmak mümkün değildir.
(MT5(build 2361 tarafından düzeltilmedi )) *** (yeni) Derleme Hatası,
Uygunsuz uyarı çıktısıyla ilgili ana şikayet, "kullanımdan kaldırılan davranış, gizli yöntem çağrısı gelecekteki bir MQL derleyici sürümünde devre dışı bırakılacaktır". Mevcut uygulama, serçelere top atışıdır.
( MT5(build 2361 tarafından sabitlenmedi )) ** (yeni) Derleme Hatası, hata, dönüş değeri, parametre tipi şablon tipine göre verilen bir şablon sınıfı içinde bulunan bir dahili sınıf olduğunda, bir şablon işlevinin dönüş değeriyle ilgilidir. şablon işlevi argümanı.
( MT5(build 2361 tarafından düzeltilmedi )) * (yeni) Derleme Hatası , bir şablon sınıfı içinde bir şablon işlevi bildirirken yeniden kullanılan şablon türü adları için kontrol yok, bu da beklenmeyen davranışa neden oluyor.
( MT5(build 2361 tarafından düzeltilmedi )) * (yeni) Çalışma Zamanlayıcı Hatası, açık bir tip gönderimi, bir temel sınıf nesnesine bir işaretçiyi bir üst sınıfa bir işaretçiye dönüştürmek için temel sınıf oluşturucusunda gerçekleştirilemez.
( MT5(build 2361) tarafından düzeltilmedi ) (yeni) Derleme Hatası, nesne bir şablon sınıfı/yapısı olduğunda "yerinde oluşturulan" nesnenin döndürülmesiyle ilgili birçok hata.


C++ ile karşılaştırıldığında MQL'de aşırı yüklenmiş işlev çağrısı önceliklerinin uyumsuzluğuyla ilgili kusurlar:
( MT5(build 2361) tarafından düzeltilmedi ) *** Derleme Hatası, A sınıflarının kalıtımı olduğunda ve iki aşırı yükleme işlevi uygulandığında, örneğin biri A* parametresiyle ve ikincisi B* ile, ardından MQL'de bir C* veya D* nesnesinin böyle bir işlevine geçiş, "aşırı yüklenmiş işleve belirsiz çağrı" derleme hatasına neden olur.
(MT5(build 2361) tarafından sabitlenmedi ) ** Çalışma zamanı, Aşırı yüklenmiş şablon işlevlerine yapılan çağrılar için öncelik uyuşmazlığı.
( MT5(build 2361) tarafından düzeltilmemiştir ) ** Derleme Hatası, aşırı yüklenmiş şablon işlevlerine yapılan çağrıların önceliği aslında şablon parametresinin türüne bağlıdır ve teoride derleme sonucunu hiçbir şekilde etkilememelidir.
( MT5(build 2361 tarafından düzeltilmedi )) ** Derleme Hatası, şablon işlev kodu oluşturulurken, geçirilen parametreler için uygun bir imzaya sahip aşırı yüklenmiş bir şablon işlevi olmasına rağmen bir derleme hatası oluşuyor.


İşlevlerin yavaş yürütülmesiyle ilgili kusurlar, kod iyileştiricinin çalışması:
( MT5(build 2361 tarafından sabitlenmedi )) ** (yeni) ArrayResize kullanarak diziye bir öğe eklerken çalışma zamanı, büyük ek yük, örneğin 7'ye kadar yapılar için bunlar için belleğin önceden ayrılmış olmasına rağmen kat daha yavaş.


Teklifler:
link - değişmez değerleri ve geçici değişkenleri const ref işlev argümanları olarak iletme yeteneği sağlama hakkında.
bağlantı - "Proje" sekmesindeki proje dosyalarını taşırken, açık olan ve ME sekmelerinde bulunan dosyaları taşımak için konum yollarını otomatik olarak günceller.
link - MQL typedef bildirimine işlevsellik ekleme ihtiyacı hakkında.
bağlantı - varsayılan kopya oluşturucuların ve atama operatörlerinin oluşturulmasını zorlama yeteneği sağlama hakkında.

 
fxsaber :

Mimari nedenlerle, görselleştirici her zaman mevcut durumu göstermez.

Alexey Klenov :
Teşekkürler, aklımda tutacağım.

Duraklattıktan sonra birkaç tik (F12) başlatılarak tedavi edilir.

 
Andrey Khatimlianskii :

Duraklattıktan sonra birkaç kene (F12) başlatılarak tedavi edilir.

Teşekkür ederim. Deneyeceğim.

 
Sergey Dzyublik :

Daha önce açıklanan hatayla başka bir karşılaşma - "Tanımsız Davranış, dahili bir "C" türüyle birkaç kez sarılmış karmaşık bir nesne oluşturuyorsunuz ve orada tamamen farklı bir veri türü olduğu ortaya çıkıyor, belki "B", belki "int" , ne istersen ...".
Aslında, gün yerelleştirme, çoğaltma ve geçici çözümler aramak için harcandı, ne yazık ki hepsi boşuna...

Sonunda kabul edilebilir bir çözüm bulmayı başardı.
Statik bir sınıf üyesi kullanmanın yukarıdaki hatayı atlamayı mümkün kıldığı ortaya çıktı:

 template < typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template < typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template < typename _Tp>
class A_g{
public :
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template < typename _Tp>
class V{
public :
   struct It : public   A_g<_Tp>::It{};
   It b;
};


template < typename _Tp>
class Opt_g{
   template < typename _It>
   static void test(_It &it){      
       printf ( typename (_Tp));           // ClassA*
       printf ( typename (it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template < typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart (){ 
   V< int > v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V< int >::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

Bu depolama hatası nasıl düzeltilir?


Yavaş yavaş daha fazla dosya kaydetmeyi reddediyor. Yakında depolanan her şeyin güncellenmesi imkansız olacak.

 

Stop limiti al emirleri ve sat stop limiti emirleri için araç ipucunda kar/zarar yanlış hesaplanıyor.

Fareyi tp&#39;nin üzerine getirdiğinizde

fareyi sl&#39;nin üzerine getirdiğinizde