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

 
fxsaber #:
Bu ilginç bir sonuç.

Henüz düzeltilmemiş olması garip:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

Böcekler, böcekler, sorular

A100, 2020.08.01 05:42

Yürütme sırasında hata oluştu:
template<typename T>
void f( T ) { Print( __FUNCTION__); }
void OnStart()
{
        {
                f<ulong>( 1 );
        }
}

Result: OnStart::unnamed#00000216656562DC80::f<ulong>

Beklenen: OnStart::f<ulong>


 
fxsaber #:
Derleyici sınırlaması.

Bu bariz bir kusurdur - derleyicinin bu tür kodlar için şimdiden bir sağlık ekibi çağırması gerektiğini düşünüyorum

İç içe geçmiş makrolardaki parantezleri bu miktarda hayal etmek varsayımsal olarak mümkündür, ancak küme parantezlerini hayal etmek mümkün değildir.
 
Bir yapı/sınıf nesnesinin alanlarının başlatılma sırasının, yapıcıdan sonraki girişlere değil de alanların karşılıklı düzenlenmesine bağlı olduğu durumlarda, bunun doğru davranış olup olmadığını lütfen bildiriniz?
struct A
{
  int Count;
  
  A() : Count(0) {}
};

struct B : public A
{
  int i, j; // Единственная строка, отличающая от C.

  B() : i(this.Count++), j(this.Count++) {}
};

struct C : public A
{
  int j, i; // Единственная строка, отличающая от B.

  C() : i(this.Count++), j(this.Count++) {}
};

void OnStart()
{
  B b;  
  Print(b.i); // 0
  Print(b.j); // 1

  C c;
  Print(c.i); // 1
  Print(c.j); // 0
}

Beklenti, yapıcıda belirtildiği gibi soldan sağa başlatılmasıydı.

C() : i(this.Count++), j(this.Count++) {}

Ancak ilklendirmenin alanlara göre yukarıdan aşağıya doğru gittiği ortaya çıktı. Ve yapıcıdan sonra belirtilen başlatma sırası önemli değildir. Bu doğru mu?

 
fxsaber #:
Lütfen bunun doğru davranış olup olmadığını, bir yapı/sınıf nesnesinin alanlarının başlatılma sırasının yapıcıdan sonraki girişlere değil de alanların karşılıklı düzenlenmesine bağlı olup olmadığını bildiriniz.

Beklenti, yapıcıda belirtildiği gibi soldan sağa başlatmaktı.

Ancak ilklendirmenin alanlara göre yukarıdan aşağıya doğru gittiği ortaya çıktı. Ve yapıcıdan sonra belirtilen başlatma sırası önemli değildir. Bu doğru mu?

Zaten kimse okumayacaksa Geliştiriciler neden bu kadar ayrıntılı bir yardım yazıyor!? Yardımı tek bir cümleyle basitleştirmeyi öneriyorum: Foruma sorun - size yardımcı olacaklar!

 
A100 #:

Zaten kimse okumayacaksa Geliştiriciler neden bu kadar ayrıntılı bir yardım yazıyor!? Yardımı tek bir cümleyle basitleştirmeyi öneriyorum: Foruma sorun - size yardımcı olacaklar!

Bir sorunun cevabını yardımda bulma şeması net olduğunda, forum yardımına daha az başvuracağım.

 
fxsaber #:

Sorunun cevabını yardımda bulma şemasını anladığımda, forumu daha az kullanacağım.


"Veri Tipleri" -> "Yapılar ve Sınıflar".

Başlatma listesinde, üyeler herhangi bir sırada olabilir, ancak tüm sınıf üyeleri bildirim sırasına göre başlatılacaktır.
 
Sergey Gridnev #:

"Veri Türleri" -> "Yapılar ve Sınıflar" bölümünde

Başlatma listesinde üyeler herhangi bir sırada olabilir, ancak tüm sınıf üyeleri bildirildikleri sıraya göre başlat ılacaktır.

Teşekkürler. Ne yazık ki, nereye ve nasıl bakılacağı her zaman net değil.

 
fxsaber #:

Teşekkür ederim. Ne yazık ki, nereye ve nasıl bakılacağı her zaman net değil.

Evet, öyle.
 

Gösterge çalışmasında çok tatsız bir şey buldum (MT5 ve MT4).
Olaylar zamanlayıcı çalışmasını engeller.
Uzman Danışman'da böyle bir şey yok.
Bir kez daha, kararlı zamanlayıcı çalışmasının gerekli olduğu göstergeleri kullanmanın mantıklı olmadığına ikna oldum. Bu özellikle duyarlı arayüzler için geçerlidir.

İşte zamanlayıcının 20 milisaniyeye ayarlandığı ve zamanlayıcı olayları arasındaki sürenin 100 milisaniyeyi aşması durumunda görüntülendiği bu sorunu gösteren bir gösterge.

#property indicator_chart_window
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(20);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
void  OnTimer()
  {
   static uint last_time = GetTickCount();
   uint cur_time = GetTickCount();
   if (cur_time-last_time>100) Print(string(cur_time-last_time)+" ms");
   last_time = cur_time;
  }
//+------------------------------------------------------------------+



 
Eklendi.
template <typename T>
class A
{
public:  
  void f() const { ::Print(typename(T)); }
};

void OnStart()
{
  const A<MqlTick> a;
  
  a.f(); // struct MqlTick
}