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

 
MetaQuotes Software Corp.:
Да, скомпилированные в версиях 1180-1884, нужно пересобрать.

В новой версии МЕ ошибка.

Если в классе есть перегруженные методы, и один из них protected а другой public, то при вызове метода public все равно выдает ошибку protected method access error.

 
Andrey Barinov:

В новой версии МЕ ошибка.

Если в классе есть перегруженные методы, и один из них protected а другой public, то при вызове метода public все равно выдает ошибку protected method access error.

Приведите пожалуйста код

 
Ilyas:

Приведите пожалуйста код

Локализовать не получилось пока.

Но, вот картинка. Видно что методы есть как public так и protected. При этом вылезает ошибка компиляции. В предыдущих билдах все было ОК.

P.S. Это у меня получается только при компиляции файла .mq5 с включенным режимом оптимизации. При компиляции идентичного mq4  файла, таких ошибок нет.

pic

 
Andrey Barinov:

Локализовать не получилось пока.

Но, вот картинка. Видно что методы есть как public так и protected. При этом вылезает ошибка компиляции. В предыдущих билдах все было ОК.

P.S. Это у меня получается только при компиляции файла .mq5 с включенным режимом оптимизации. При компиляции идентичного mq4  файла, таких ошибок нет.

У меня всплыло аналогичное в MQL4. Пока не раскапывал.

 
Andrey Khatimlianskii:

У меня всплыло аналогичное в MQL4. Пока не раскапывал.

Я тоже откатился пока
 
Andrey Barinov:

Локализовать не получилось пока.

Но, вот картинка. Видно что методы есть как public так и protected. При этом вылезает ошибка компиляции. В предыдущих билдах все было ОК.

P.S. Это у меня получается только при компиляции файла .mq5 с включенным режимом оптимизации. При компиляции идентичного mq4  файла, таких ошибок нет.

Не хватает кода вызова

вот пример, отрабатывает правильно:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class A
  {
public:
   void              func(int) { }

private:
   void              func(A *) { }
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   A a;

   a.func(0);    // Ok
   a.func(&a);   // Error
  }
 
Ilyas:

Не хватает кода вызова

вот пример, отрабатывает правильно:

Локализовал

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class B;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class A final
  {
public:
   void              A(void) {}
   void             ~A(void) {}
   void              Test(B *const b){b.Test(::GetPointer(this));}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class B final
  {
   //====================
private:
   //====================
   //===============
   void              Test(const int index);
   //===============
   //===============
   //====================
public:
   //====================
   //===============
   //===============
   void              B(void) {}
   virtual void     ~B(void) {}
   //===============
   bool              Test(A *const a) {return(true);}
   //===============
   //===============
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }


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

 
MetaQuotes Software Corp.:

В новом редакторе включены множественные стили форматирования кода:


было бы здорово сделать отдельную ветку с описанием новой версии.

 
Ilyas:

Приведите пожалуйста код

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

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class A
  {
protected:
   void              A(void) {}
public:
   void             ~A(void) {}
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   A* test[];

   ::ArrayResize(test,10,0);

   return(INIT_SUCCEEDED);
  }


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

 
Ilyas:

Не хватает кода вызова

вот пример, отрабатывает правильно:

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

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

  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   A a;

   a.Test();

//---
   return(INIT_SUCCEEDED);
  }
Причина обращения: