Новая версия платформы MetaTrader 4 build 1170 - страница 24

 
Andrey Barinov:

Локализовал


Ошибка есть только при компиляции этого кода как .mq5, если компилировать как .mq4 то без ошибки компилируется.

Спасибо за представленный код.

Из-за ошибки, компилятор проверял доступ к обеим функциям.


Исправлено.


 
Andrey Barinov:

И еще вот такое перестало компилироваться:


Это будет исправлено или так и останется?

Это так останется.

Для обхода используйте так:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class A
  {
protected:
   void              A(void) {}
   
public:
   void             ~A(void) {}
   
   static int ArrayResize(A* &a[],int size,int reserv)
     {
      return(::ArrayResize(a,size));
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnStart(void)
  {

   A* test[];
   A::ArrayResize(test,10,0);
   return(0);
  }
 
Andrey Barinov:

А вот так у меня как .mq5 не компилируется.

Этот код тоже будет компилироваться

 
Ilyas:

Это так останется.

Для обхода используйте так:

А зачем в этом коде доступ к конструкторам? Объекты ведь не создаются.

 
Andrey Barinov:

И еще вот такое перестало компилироваться:


Это будет исправлено или так и останется?

Вот это мой случай. ArrayResize действительно не должен создавать объекты, поэтому не понятно, почему ошибка.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MetaTrader 5 build 2121: Новое оформление тестера стратегий

Andrey Barinov, 2019.08.24 17:35

Такой код перестал компилироваться

class A
  {
protected:
   static bool       Test(const bool test) {return(true);}
public:
   void              A(void) {}
   void             ~A(void) {}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class B : public A
  {
public:
   void              B(void) {}
   void             ~B(void) {}
   static void       Test2(void) {A::Test(true);}
  };

В пятерке такой код больше не компилируется.

И что вот такое сообщение значит?

deprecated behavior, hidden method calling will be disabled in a future MQL compiler version


 
Andrey Barinov:

И что вот такое сообщение значит?

deprecated behavior, hidden method calling will be disabled in a future MQL compiler version

В этом скрипте несколько таких предупреждений теперь.

class A
  {
public:
   bool       Test(const bool test) {return(true);}
  };
class B : public A
  {
   void       Test(void) {this.Test(true);} // deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
  };
 
 
fxsaber:
Сломали C#. Не компилируется в MT5.

ага, все... приплыли!

пробовал править MQL5 код панельки в MetaTrader 5 build 2121 , вообще не понятные баги, то при первой компиляции споткнулся компилятор о макрос  #ifdef __MQL5__ , написал выше макроса сигнатуру функции C#, затем ошибка по макросу TICKET_TYPE , а еще раз компилировал опять ошибка на первой  сигнатуре вызова функции C#.... а перед этим же откомпилировал этот участок кода?

 
Andrey Barinov:

В пятерке такой код больше не компилируется.

class A
  {
protected:
   static bool       Test(const bool test) {return(true);}
public:
   void              A(void) {}
   void             ~A(void) {}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class B : public A
  {
public:
   void              B(void) {}
   void             ~B(void) {}
   static void       Test2(void) {A::Test(true);}
  };

Спасибо за сообщение.

Исправлено


Andrey Barinov:

И что вот такое сообщение значит?

deprecated behavior, hidden method calling will be disabled in a future MQL compiler version

В MQL вводится переопределение методов.
Это означает, что вызываемый родительский метод скрыт методом потомка (пока такое разрешили, выдаёся предупреждение, чтобы пользователи успели адаптировать свои существующие коды).

Вам, чтобы избежать такого предупреждения, нужно явно указать скоп вызываемого метода:

class A
  {
public:
   bool       Test(const bool test) {return(true);}
  };
class B : public A
  {
   void       Test(void) { this.A::Test(true); } // deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
  };
Причина обращения: