Новая версия платформы MetaTrader 5 build 2190 - страница 21

 
fxsaber:

Второй массив статический.


Оказалось, что такая запись

не делает массив статическим нулевой длины.

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

Примечание

Функция может быть применена только к динамическим массивам...

 
Alexey Viktorov:

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

#include <WinAPI\WinAPI.mqh>

#define GA_ROOT           0x00000002

void OnStart()
{
  const int ControlID[] = {0xE81E, 0x804E};  

  long Handle = user32::GetAncestor(::ChartGetInteger(0, CHART_WINDOW_HANDLE), GA_ROOT); 
                                                                                         
  for (int i = 0; i < sizeof(ControlID) / sizeof(int); i++)                                       
    Handle = user32::GetDlgItem(Handle, ControlID[i]);
    
  Print(Handle);
}


В этом примере единообразно получаю нужный хендл через задание элементов ControlID. Думал, что если в массиве ничего не задать, оставив пустые фигурные скобки, то цикл просто проигнорируется. Но оказалось, что массив в таком случае становится динамическим, а не статическим нулевой длины.

 
fxsaber:


В этом примере единообразно получаю нужный хендл через задание элементов ControlID. Думал, что если в массиве ничего не задать, оставив пустые фигурные скобки, то цикл просто проигнорируется. Но оказалось, что массив в таком случае становится динамическим, а не статическим нулевой длины.

Так и сейчас массив у вас динамический, и при его объявлении он проинициализирован двумя константными элементами.
Статическим он станет, если вы явно укажите длину массива.

const int ControlID[2] = {0xE81E, 0x804E};

Я тоже не пойму, как статический массив может быть нулевой длины.
То есть компилятор не даст создать статический массив нулевой длины.

const int ControlID[0];
 
Roman:

Статическим он станет, если вы явно укажите длину массива.

Это не обязательно. Попробуйте без указания длины проинициализировать массив во время определения. И посмотрите, что будет возвращать ArrayResize.

 

Ошибка в ME при определении области видимости шаблонных методов.


На скрине показано, что якобы метод public - нажать ALT+M.

class A
{
  template <typename T>
  void f() {}
  
  void g() {}
};
 
MetaQuotes Software Corp.:
Выпустили бета-версию MetaTrader 5 build 2206.

Эта версия сбрасывает настройки индикатора при повторном входе в систему?

https://www.mql5.com/ru/forum/324536/page17#comment_13839426


Does this version reset the indicator settings when I log in again?

Новая версия платформы MetaTrader 5 build 2190
Новая версия платформы MetaTrader 5 build 2190
  • 2019.11.09
  • www.mql5.com
В пятницу 18 октября 2019 года будет выпущена обновленная версия платформы MetaTrader 5...
 
fxsaber:

Это не обязательно. Попробуйте без указания длины проинициализировать массив во время определения. И посмотрите, что будет возвращать ArrayResize.

 const int ControlID[] = {1, 2};  
 ArrayResize(ControlID, 3);
'ControlID' - constant variable cannot be passed as reference  

Ошибка компиляции.
Хм, действительно, const делает константным массив, а не его элементы.

 
fxsaber:


В этом примере единообразно получаю нужный хендл через задание элементов ControlID. Думал, что если в массиве ничего не задать, оставив пустые фигурные скобки, то цикл просто проигнорируется. Но оказалось, что массив в таком случае становится динамическим, а не статическим нулевой длины.

А почему-бы проверять не sizeof а ArraySize? Тогда точно длинна массива будет нулевой.

 
Alexey Viktorov:

А почему-бы проверять не sizeof а ArraySize? Тогда точно длинна массива будет нулевой.

Хотел задать верхнюю границу цикла на этапе компиляции.

 
Roman:

Ошибка компиляции.
Хм, действительно, const делает константным массив, а не его элементы.

Если уберете const, то ArrayResize все равно будет возвращать -1, т.к. массив статический.

Причина обращения: