Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 148

 

derleyicinin neden buna küfretmeye başladığını söyle (ekli ekran görüntüleri)?

bir yıl önce her şey yolundaydı, ama şimdi son terminali koydum, derledim ve şimdi

ve bu tür derleyici mesajlarına yanıt aramak için nerede?

ve bu uyarı nasıl düzgün bir şekilde çözülür?

yukarı. üçüncü bir ekran eklendi - zararsız bir kod için aynı mesaj

ve 4. ekran

ne tür bir derleyici katılığı ve nasıl çözülür?

Компиляция - Разработка программ - Справка по MetaEditor
Компиляция - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Компиляция — это процесс перевода исходного кода MQL4/MQL5-программы на машинный язык. Ее результатом является создание исполняемого файла программы (*EX4 или *.EX5), который может быть запущен в торговой платформе. Скомпилировать можно любой файл (*.MQ4, *.MQ5 или *.MQH), однако исполняемый файл (*.EX4 или *.EX5) может быть получен только в...
Dosyalar:
22.png  6 kb
3.png  4 kb
4.png  5 kb
 
/+------------------------------------------------------------------+
TT
class cl_search_: public cl_search_b<T>
  {
#define ME cl_search_<T>
#define THIS & this
public :
   atype             adres;lin; //Ошибка тут компилятор молчит
   ME               *m[ 2 ],*par;
   atype Adress()                            { return par== NULL ? adres :(adres|(par.m[ 1 ]==THIS? (par.lin^(par.lin<< 1 ))>> 1 : 0 )|par.Adress()); }
   string AdressStrBit( int move= 0 )           { return    "|| " +IntToBitString(adres)+ " " +( string )lin+(par== NULL ? "\n" : (( " " +( string )(par.m[ 1 ]==THIS ?(par.lin^(par.lin<< 1 ))>> 1 : 0 ))+ " \n" +(par.AdressStrBit())));}
   string IntToBitString(atype s= 0 )          { if (s== 0 ) {s=adres;} string itog = "W" ; atype a= 1 ; uchar ss= sizeof (atype)* 8 ; for ( char i=ss- 1 ; i>= 0 ; i--) itog+=( string )( uint )((s&a<<i)> 0 ); return itog;}
   void CorrectPar()                         { if (m[ 0 ]!= NULL ) m[ 0 ].par=THIS; if (m[ 1 ]!= NULL ) m[ 1 ].par=THIS;}

   ME *Select( bool next= true ) { return par== NULL ?  par:((par.m[next]==THIS || par.m[next]== NULL ) ?  par.Select(next) :par.m[next].Start(!next)); }
   
   
   ME *Port(atype a, bool write= true )
     {
#define PORT(A) Port(A&linre,write)
#define NEW new ME(THIS)
       if (m[ 1 ]== NULL && m[ 0 ]== NULL )
        {
         if (!write) return NULL ;
         //lin=(~(atype)0)<<1;
          adres=a&lin;
         return m[a& 1 ]=NEW;
        }
      atype h111=(lin&a)^adres;
      atype linre=(~lin)>> 1 ;
       if (h111== 0 )
fxsaber :
Böyle bir özellik ile karşı karşıya.


Statik alanlara sahip bir sınıfın tanımı sırasında nesnesi hemen oluşturulursa, bir derleme hatası olacaktır.

En son sürümde, derleyici sınıfta bir tipi olmayan bir değişkene yemin etmemiştir. Ancak EA lansman sırasında çöktü

 

Bir "özellik" ile karşılaştım... Göstergeyi dörtten beşe çevirmek için bir saatten fazla zaman harcadım. hatanın nerede olduğunu anlayamadım, tk. kod çapraz platform gibi görünüyordu. sonunda, burası göze çarpmayan bir yer. Bazı nedenlerden dolayı iki parametre değiştirildi:

Gelişme?

daha var mı

 
daha var mı
StringTrimSol / Sağ

DizeBirleştir

muhtemelen başka bir şey daha var, bu tür işlevlerin tam listesiyle de ilgileniyorum

---

belki standart kütüphanede #endif araması yapmalısın

 
// Альтернативное создание папки.
bool FolderCreate2( const string FolderName, const int CommonFlag = 0 )
{
  return(FileOpen(FolderName + "\\", FILE_WRITE | (CommonFlag ? FILE_COMMON : 0)) == INVALID_HANDLE);
}
 
dördünde, çoklu zaman çerçevesi elde etmek için göstergenin kendisini iCustom aracılığıyla aramak mümkündü. Beş için bir bağlantı / örnek paylaşmıyor musunuz? Nedense aynı şekilde çalışmıyor :(
 

Ancak savaş danışmanı, danışmanın çalışmayı bıraktığı bir durumla karşılaştı. Davaya girmeyi başardı. Fark edilmesi neredeyse imkansız olan harika bir nüans.

Bu koddaki sorunu görmeye çalışarak gerçekten hissedebilirsiniz.

 // В коде содержится ошибка, которая остановит выполнение этого советника.

input int Range = 0 ;

class A
{
public :
   void f() {}
};

A* const a = new A;

void OnInit () { a.f(); }

void OnDeinit ( const int ) { delete a; }
 
fxsaber :

Ancak savaş danışmanı, danışmanın çalışmayı bıraktığı bir durumla karşılaştı. Davaya girmeyi başardı. Fark edilmesi neredeyse imkansız olan harika bir nüans.

Bu koddaki sorunu görmeye çalışarak gerçekten hissedebilirsiniz.

Ana kurallardan biri - bir nesneyi hangi seviyede tasarlarsanız, aynı seviyede onu yıkmanız gerekir. Daha yüksek ve daha düşük değil.
 
Slava :
Ana kurallardan biri - bir nesneyi hangi seviyede tasarladığınız, aynı seviyede onu yıkmanız gerekir. Daha yüksek ve daha düşük değil.

Teşekkürler, iyi kural. Kendi beceriksizliğimin kurbanı oldum. Doğru, böylesine bariz bir durum için biraz daha kurala ihtiyaç var.

 // В коде содержится ошибка, которая остановит выполнение этого советника.

input int Range = 0 ;

class A
{
   void f() {}
public :
  A()
  {
     static A* Tmp = & this ;
    
    Tmp.f();
  }
};

void OnInit () { A a; }


Uyarı akıllı her iki durumda da yapabilir mi?

 
fxsaber :

Ancak savaş danışmanı, danışmanın çalışmayı bıraktığı bir durumla karşılaştı. Davaya girmeyi başardı. Fark edilmesi neredeyse imkansız olan harika bir nüans.

Bu koddaki sorunu görmeye çalışarak gerçekten hissedebilirsiniz.

Bu kodla ilgili sorun nedir? Deinit'te sabit bir işaretçi ile bir nesneyi öldürdüler (burada bir tutamaç olduğunu biliyorum). C ++ tarzında uzuvlarda normal çekim, aksi takdirde yaratıcılar herkesi reddetti)))