Hatalar, hatalar, sorular - sayfa 2682

 

MT5 hatası (derleme 2367) MQL'deki şablon işlevlerinin yürütme öncelikleri ile C++'daki şablon işlevleri arasındaki uyumsuzluk (çevrimiçi: https://onlinegdb.com/B172m1PLL ).
Görünüşe göre hata düzeltmesinin bir parçası olarak derleme hatası düzeltildi, ancak aşırı yüklenmiş şablon işlevlerinin yürütme önceliği C++'daki davranışa getirilmedi.

 template < typename T>
struct B{
   T data;
};

template < typename T>
struct BB : public B<T>{};


template < typename T>                                             
struct A{
public :
   static void test(T& src){
       printf ( "1" );
   }
   
   template < typename TT>
   static void test(B<TT>& src){
       printf ( "2" );
   }
};

                                         
struct AA{
public :
   static void test(B< int >& src){
       printf ( "1" );
   }
   
   template < typename TT>
   static void test(B<TT>& src){
       printf ( "2" );
   }
};
      

void OnStart (){
   BB< int > bb;
   
   A<B< int >>::test(bb);         // MQL:2,  should be 1      
   AA::test(bb);                 // MQL:2,  should be 1      
}
 

Komik bir sorunla karşılaştım. Birkaç parametre tipine sahip bir şablon tipini bir makroya geçiremezsiniz, çünkü önişlemci bir şablonla ilgilendiğini bilmez ve parametreleri virgülle sayar.

SO üzerinde C++ için sorunun açıklamasını ve çözümünü buldum.

 #define COMMA ,
#define XYZ(type) {type ptr;}

XYZ(TemplatedType<A COMMA B>); // ошибка

MQL'de denedim ama ne yazık ki çalışmıyor. Derleyici, geçirilen tür tarafından tanımlanan bir değişken için "bildirilmemiş tanımlayıcı" hatası veriyor.

Şimdiye kadar, ek bir türetilmiş sınıfla başardım, ancak bunu C++ 'daki gibi düzeltebilir miyim?

Hata. Bir çözüm buldu. Bu nasıl çalışır:

 #define COMMA() ,
Soru kaldırılır.
Passing a template type into a macro
Passing a template type into a macro
  • 2017.05.30
  • bitmaskbitmask 22.3k1111 gold badges7070 silver badges133133 bronze badges
  • stackoverflow.com
I have a macro that takes a number of arguments, one of which is a type. For instance: If I try to instantiate this with a template type, say: This will not work as intended, as the pre-processor knows nothing of templates. It will...
 

MT5 hatası (2367 derlemesi) aşırı yüklenmiş şablon işlevlerinin konumu derleme sonucunu etkiler.
Çalışmanın gerçekleştirildiği ilk bilet - https://www.mql5.com/ru/forum/1111/page2655#comment_15119627
C++ çevrimiçi ( https://onlinegdb.com/BJzbH2DLL ).


 class input_iterator_tag  {};
class forward_iterator_tag       : public input_iterator_tag         {};
class bidirectional_iterator_tag : public forward_iterator_tag       {};
class random_access_iterator_tag : public bidirectional_iterator_tag {};


template < typename _Iterator, typename _Tp>
_Iterator set_value( const _Iterator &it,  _Tp &value, const   forward_iterator_tag*  tag){
   printf ( "2\r\n" );
   return set_value(it, value, (input_iterator_tag*) NULL );                 // 'set_value' - ambiguous call to overloaded function         
};

template < typename _Iterator, typename _Tp>
_Iterator set_value( const _Iterator &it,  _Tp &value, const   bidirectional_iterator_tag*  tag){
   printf ( "3\r\n" );
   return set_value(it, value, (forward_iterator_tag*) NULL );
};

template < typename _Iterator, typename _Tp>
_Iterator set_value( const _Iterator &it,  _Tp &value, const random_access_iterator_tag* tag){
   printf ( "4\r\n" );
   return set_value(it, value, (bidirectional_iterator_tag*) NULL );
};

template < typename _Iterator, typename _Tp>
_Iterator set_value( const _Iterator &val,  _Tp &value, const input_iterator_tag* tag){
   printf ( "1\r\n" );
   return val;
};


template < typename _Iterator, typename _Tp>
_Iterator set_value( const _Iterator &it, _Tp &value){
   return set_value(it, value, it.tag);                        
};


template < typename T>
struct A{
   T data;
   static random_access_iterator_tag* tag;
};

template < typename T>
random_access_iterator_tag* A::tag = NULL ;

class B{};


void OnStart (){ 
   A<B*> it;
   const B* const b_ptr = new B();
   set_value(it, b_ptr);                                      
   
   A< int > it_int;
   const int value_int = 5 ;
   set_value(it, value_int);         
}

int main(){
   OnStart ();
   return 0 ;
};
 

Şablon işlevi/sınıf önbelleğindeki kusurlar:
( MT5(build 2368) tarafından düzeltildi )) *** ( yukarı ) Tanımsız Davranış, "C" dahili tipine sahip karmaşık, çoklu sarılmış bir nesne yaratırsınız ve bunun tamamen farklı bir veri türü olduğu ortaya çıkar, belki "B", belki "int", ne istersen...
( MT5(build 2368) tarafından düzeltildi )) * Derleme Hatası, fonksiyon işaretçi argümanını const ref şablon argümanı olarak geçirirken oluşan hata.
( MT5(build 2368) tarafından düzeltildi ) * 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 2368 tarafından düzeltildi )) *** ( yukarı ) Derleme Hatası, bir şablon işlevi içindeki bir hata, açık bir döküm işleminin parçası olarak geçirilen bir işaretçi, diğer durumlarda bir sınıf gibi davranır - bir işaretçi gibi.
(MT5(build 2368) tarafından düzeltildi )) ** ( yukarı ) Derleme Hatası, bir şablon işlevinin şablon parametresi için dahili sınıfa erişmeye çalışırken oluşan hata.
(MT5(build 2368) tarafından düzeltilmedi ) *** 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 2368) tarafından düzeltilmedi ) ** Derleme Hatası, dönüş değeri, parametre tipi şablon işlevi argümanının türü tarafından verilen şablon sınıfının içinde bulunan bir dahili sınıf olduğunda, hata bir şablon işlevinin dönüş değerini etkiler .
(MT5(build 2368) tarafından düzeltilmedi ) ** Derleme Hatası, kalıtımda ve dahili sınıfta aynı sınıf adı kullanıldığında temel sınıf çağrılırken şablon yapıcısında ad alanı ve kapsamla ilgili hata.
(MT5(build 2368) 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 2368) 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 2368) tarafından düzeltildi ) ** Derleme Hatası, dahili sınıf kullanılırken şablon sınıfı kod oluşturma hatası.
( MT5(build 2368) tarafından düzeltildi ) * Derleme Hatası, bir şablon yöntemi/sınıfı oluşturulurken oluşan hata, bir şablon parametresinin "otomatik olarak değiştirilmesi" süreci, kapsamın ötesine geçerek ana program koduna giriyor.
( MT5(build 2368) tarafından düzeltildi ) * Derleme Hatası, bir şablon sınıfı bir şablon yöntemi için bir dönüş değeri olarak hareket ettiğinde otomatik olarak şablon sınıfı kodu oluşturmayan bir hata.
( MT5(build 2368) tarafından düzeltildi ) * 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 2368) tarafından düzeltildi ) * Derleme Hatası, bir şablon sınıfı içinde bir şablon işlevi bildirirken yeniden kullanılan şablon türü adlarının kontrol edilmemesi, beklenmeyen davranışa neden oluyor.
(MT5(build 2368) tarafından düzeltildi ) Derleme Hatası, nesne bir şablon sınıfı/yapısı olduğunda "yerinde oluşturulan" nesnenin döndürülmesiyle ilgili birçok hata.
(MT5(build 2368) tarafından sabitlenmedi ) * (Bu bir hata değil, bu bir özellik) temel sınıf yapıcısında, işaretçiyi temel sınıf nesnesine, işaretçiye yönlendirmek için açık bir typecast gerçekleştirmek mümkün değildir. ebeveyn sınıfı.


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 2368 tarafından düzeltildi )) ** ( yukarı ) Derleme Hatası, aşırı yüklenmiş şablon işlevlerine yapılan çağrıların önceliği aslında şablon parametresinin tipine bağlıdır ve teoride derleme sonucunu hiçbir şekilde etkilememelidir.
( MT5(build 2368 tarafından düzeltildi )) ** ( yukarı ) Aşırı yüklenmiş şablon işlevlerinden ilki tamamen özelleştirilmiş bir şablon temel sınıfını ve ikincisi özel olmayan bir şablon temel sınıfını kullandığında Derleme Hatası.
(MT5(build 2368) tarafından düzeltilmemiştir ) ** Derleme Hatası, şablon fonksiyon kodu oluşturulurken, geçirilen parametreler için uygun bir imzaya sahip aşırı yüklenmiş bir şablon fonksiyonu olmasına rağmen bir derleme hatası oluşur.
(MT5(build 2368) tarafından düzeltilmedi ) * Derleme Hatası, farklı sayıda şablon parametresiyle aşırı yüklenmiş şablon işlevleri çağrılırken "aşırı yüklenmiş işleve belirsiz çağrı".
( MT5(build 2368) tarafından düzeltildi ) *** A <= B <= C <= D sınıflarının kalıtımı olduğunda ve örneğin biri A* parametreli ve ikincisi iki aşırı yükleme işlevi uygulandığında Derleme Hatası B* ile, daha sonra 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 2368) tarafından düzeltildi ) ** Çalışma zamanı, Aşırı yüklenmiş şablon işlevlerine yapılan çağrılar için öncelik uyuşmazlığı.

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


Teklifler:
(yeni) bağlantı - sınıflardaki statik yöntemler için intellisense çalışmasına dayalı ad alanı işlevselliği için intellisense desteğinin uygulanması hakkında.
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.

 
Şablon parametresi temel sınıf olduğunda, bir şablon sınıfında miras alınırken varsayılan erişim değiştiricisi kullanılırken MT5 hatası (derleme 2368) derleme hatası.
Önceden, her şey çalışıyordu, görünüşe göre diğer kusurları düzeltmenin bir parçası olarak bir şeyler kırıldı.

 class A{};

template < typename T>
class B : T{};             // 'A' - unexpected token       

template < typename T>
class BB : private T{};

   
void OnStart (){    
   BB<A> bb;       // Ok
   B<A> b;         // Compile Error: 
}
 

Temel sınıfın açık bir göstergesi aracılığıyla bir atama operatörü çağrılırken MT5 hatası (derleme 2368) derleme hatası . Sorun , şablon parametresi temel sınıf olan bir şablon sınıfı için kendini gösterir.
Önceden, her şey çalışıyordu, görünüşe göre diğer kusurları düzeltmenin bir parçası olarak bir şeyler kırıldı.

 struct A{
   uchar data;
   void operator =( int n){
       printf ( "1" );
   }
};

template < typename T>
struct B : public T{
   void operator =( int n){
      T:: operator =(n);     // 'operator' - undeclared identifier  
   }
};

   
void OnStart (){    
   B<A> b;        
   b = 0 ;
}
 
Herkese 03/08/2020 tarihli MT5 güncellemesinden bahsedin, işlemlerin geçmişi atlamaya mı başladı?
Dosyalar:
 

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

Hatalar, hatalar, sorular

fxsaber , 2020.03.22 10:04

mq5 - normal. mq4 - bozuk. TypeToBytes_ExampleScript.mq4'ü buradan alabilirsiniz. Yalnızca uzantı mq5 olarak değiştirilirse derlenir.

2368 - hiçbir şey değişmedi.

 

Bir MT5 terminali aracılığıyla her zaman herhangi bir komisyoncunun hesabına giriş yapabilirim. İlk girişte bir sorun varsa, o zaman uygun aracıyı aramak için Terminal'i kullanın ve ticaret sunucularından otomatik olarak veri alın. Bundan sonra, herhangi bir sorun yaşamadan hemen giriş yapabildim.


Bugün ilk kez hiçbir şeyin yardımcı olmadığı bir durumla (yeni bir komisyoncu) karşılaştım. İçeri girme. Günlüğe yazar.

2020.03.25 09:50:33.538  'xxx': no connection to XXX-Server


Aracının yerel Terminalini indiriyorum - bir patlama ile geliyor. Ve araştırma Terminalim - herhangi birinde. İlk kez böyle.

Yerel olmayan bir Terminalin bir ticaret hesabına bağlanabilmesi için bunu nasıl yapacağımı söyle?

 
fxsaber :

Yerel olmayan bir Terminalin bir ticaret hesabına bağlanabilmesi için bunu nasıl yapacağımı söyle?

MT4'te, ticaret sunucularının aranmaması için server.ini sunucu dosyasını başka bir terminale kopyalamak gerekiyordu.

mt5 hakkında bilgim yok

Neden: