Hatalar, hatalar, sorular - sayfa 2755

 

Derleyici hatası. Eski yapılarda iyi çalışır.

 struct A { };

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

struct C : B<A> { };
 

Çok basit bir Uzman Danışmanım var (ekran görüntüsüne bakın).

Grafik nesneleri grafiğin üzerine bindirilir.

Terminalin dünkü güncellemesinden önce, grafiklerde işlem seviyeleri gösteriliyordu, ancak şimdi ortadan kayboldular.

Kılavuzdaki örnekte belirtildiği gibi grafikler oluşturuyorum. Ticaret seviyelerini görüntülemek için hiçbir özellik yoktur (böyle bir özellik yalnızca temel çizelgeler için mevcuttur).

Bana yardım et lütfen.

MetaTrader ticaret platformunun ekran görüntüleri

GBPUSD, M5, 2020.05.25

Forex Club International Limited, MetaTrader 5, Gerçek

GBPUSD, M5, 2020.05.25, Forex Club International Limited, MetaTrader 5, Real


Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
//| Создает объект "График"                                          |               chart_ID=0,                               sub_window=0,                             x=0,                                      y=0,                                      width=300,                                height=200,               ...
 

Merhaba. Lütfen yazılanları anlamama yardım edin.

mqlrate rt[2];

Bunun aynı yapı verilerini otomatik olarak alan iki yapı dizisi olduğunu doğru anlıyor muyum?

Sadece veri dizisine başka bir atama yoktur ve ardından dizideki veriler hemen kullanılır.
 
Ivan_Invanov :

Merhaba. Lütfen yazılanları anlamama yardım edin.

mqlrate rt[2];

Bunun aynı verileri otomatik olarak alan iki yapı dizisi olduğunu doğru anlıyor muyum?

MQL5'te kayıt:

 MqlRates rt[ 2 ]

şu anlama gelir: iki MqlRates yapısından oluşan statik bir dizi bildirildi . Bir kez bildirildiğinde, bu yapılar çöpleri depolayabilir, bu nedenle bu yapıların açıkça verilerle doldurulması gerekir.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Константы, перечисления и структуры / Структуры данных / Структура исторических данных - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov :

MQL5'te kayıt:

şu anlama gelir: iki MqlRates yapısından oluşan statik bir dizi bildirildi . Bir kez bildirildiğinde, bu yapılar önemsiz depolayabilir, bu nedenle bu yapıların açıkça verilerle doldurulması gerekir.

Teşekkür ederim.
 
Alexey Navoykov :

Derleyici hatası. Eski yapılarda iyi çalışır.

Evet öyle bir şey var ki 2020.03.25 bile bildirilmiş , zaten 2 ay gibi aynı gün...
( MT5(build 2390) tarafından düzeltilmedi ) (yeni) Ş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 Derleme Hatası.

 

Başka bir hata:

 class A
{
   void operator =(A const &) = delete ;
};

class B : public A
{
};

class C : public B
{
};

class D : public C
{
 public :
   void operator =(A const & other) { }
};

void OnStart ()
{
  C c;
  D d;
  d = c; // attempting to reference deleted function 'void C::operator=(const C&)'
}

Burada D::operator= çalıştırılsa da C::operator='a yemin eder. Hatayı aşmak için hiyerarşideki tüm temel sınıflar için operatörü aşırı yüklemeniz gerekir.


ps Genel olarak, geliştiriciler , atama operatörünün yanlış davranışını uzun süre düzeltmeye söz verdiler, ancak işler hala orada. Bu karışıklık. Örneğin, cehennem oraya atanmış olsa bile, aşağıdaki kod hatasız derlenir:

 #include <Expert\Expert.mqh>

#include <Strings\String.mqh>

void OnStart ()
{
  CExpert Expert;
  CString String;
  Expert = String; // Ошибки нет. Типа всё нормально?
}
 
Alexey Navoykov :

Başka bir hata:
1) Burada D::operator= çalıştırılsa da C::operator= üzerine yemin eder. Hatayı aşmak için hiyerarşideki tüm temel sınıflar için operatörü aşırı yüklemeniz gerekir.
2) Genel olarak, geliştiriciler , atama operatörünün yanlış davranışını uzun süre düzeltmeye söz verdiler, ancak işler hala orada. Bu karışıklık. Örneğin, cehennem oraya atanmış olsa bile, aşağıdaki kod hatasız derlenir:

1) Büyük olasılıkla bir hata değil, MQL'nin özellikleri verilen normal bir davranış, yani:
MQL'de, temel sınıfın yöntemleri ve alanları, alt sınıflardan "doğrudan kullanılabilir".
Özünde, MQL'deki kalıtım sırasındaki davranış, her bir temel alan ve yöntem için bildirim kullanılarak uygulanan C++ ile benzerdir.
C++ çevrimiçi: https://onlinegdb.com/rJkckvFsU

 class A
{
public :
   void operator =(A const &) = delete ;
};

class B : public A
{
};

class C : public B
{
public :
     //void operator=(C const& other) { printf("C");}
};

class D : public C
{
public :
#ifdef __cplusplus
  using A:: operator =;
  using B:: operator =;
  using C:: operator =;
#endif
   void operator =(A const & other) { printf ( "D" );}
};

void OnStart ()
{
  C c;
  D d;
  d = c; 
}



Böylece d=c işleminde;
uygun bir fonksiyon ararken, temel sınıflardan tüm operatör= fonksiyonlar da katılır.
Sonuç olarak, aşırı yüklenmiş bir işlevi çağırmak için en uygun imza, varsayılan ve kaldırılan void operatörü=(const C&)'dir.

 
Sergey Dzyublik :

1) Büyük olasılıkla bir hata değil, MQL'nin özellikleri verilen normal bir davranış, yani:
MQL'de, temel sınıfın yöntemleri ve alanları, alt sınıflardan "doğrudan kullanılabilir".
Özünde, MQL'deki kalıtım sırasındaki davranış, her bir temel alan ve yöntem için bildirim kullanılarak uygulanan C++ ile benzerdir.
C++ çevrimiçi: https://onlinegdb.com/rJkckvFsU


Böylece d=c işleminde;
uygun bir fonksiyon ararken, temel sınıflardan tüm operatör= fonksiyonlar da katılır.
Sonuç olarak, aşırı yüklenmiş bir işlevi çağırmak için en uygun imza, varsayılan ve kaldırılan void operatörü=(const C&)'dir.

Dildeki bariz bir kusurda kutsal bir anlam aramaya gerek yoktur. Burada bu konuyu zaten gündeme getirdim ve İlyas düzeltileceğine dair güvence verdi. Ama üzerinden neredeyse 10 ay geçti... (

Aslında, MQL'deki kalıtım sırasındaki davranış, bildirim kullanılarak uygulanan C++ ile benzerdir.

Evet, ama MQL'de 2 x 2 = 5'e izin veriliyorsa, bunun C++'da sonuca bir artırma işleminin eklenmesine benzer olduğunu söyleyebiliriz)

 
Alexey Navoykov :

Dildeki bariz bir kusurda kutsal bir anlam aramaya gerek yoktur.

Size nasıl ve neden böyle çalıştığını açıkladılar, eğer sizin için zorsa - neyse ki size hiçbir konuda yardımcı olamam ...
Bu kutsal bir anlam değildir, ancak temel sınıf işlevlerinin aşırı yüklenmesi durumlarının yanı sıra, "bunu" kullanmadan temel sınıfın alanlarına ve yöntemlerine erişebilmeleri için kullanıcıların girdi düzeyini azaltmaya yönelik yaygın bir yaklaşımdır.