Ошибки, баги, вопросы - страница 2047

 
Alexey Navoykov:

Не понимаю, чего вы хотите.  Я ж сказал, речь шла об "инициализации переменных". И в этом контексте статические и глобальные переменные ведут себя идентично.  Я вам даже ссылку давал на документацию: инициализация переменной

Обратите внимание, что статические и глобальные переменные там везде объединены вместе.

А последовательность инициализаций мы не осуждаем, ибо она не имеет отношения к рассматриваемой проблеме.  Напомню, что проблема заключается в том, что компилятор НЕ выдаёт ошибку там, где должен. Если статическая переменная ещё неинициализирована, то к ней нельзя обращаться.

Ну поменяйте имя глобальной переменной, если вас это так смущает.  На результат это никак не повлияет.

Здрасте, приехали...Сам-то читал по этой ссылке???

Я кроме mql знаю, так-же не очень хорошо, только VBA и только там встречал директиву обязательной инициализации переменных. Заметьте, что применяется исключительно на усмотрение программиста. А вы хотите чтобы MQ принудительно заставили инициализировать абсолютно все переменные??? А последовательность инициализации менять по каждой претензии со стороны таких пользователей? Вам дали возможность отойти от правил, понимая ЧТО вы делаете, а вы просите исключить такую возможность???

Создаётся такое впечатление, что вы просто выискиваете к чему-бы придраться и охаять язык mql. Уберите static у переменной в классе и будет вам счастье.

 

Что происходит в момент переполнения системной переменной, которую получаем по GetTickCount() ?

Есть какая-то стандартная реакция со стороны терминала?

Есть ли необходимость программно отслеживать этот момент и внедрять реакцию?

 
Alexey Viktorov:

Здрасте, приехали...Сам-то читал по этой ссылке???

Я кроме mql знаю, так-же не очень хорошо, только VBA и только там встречал директиву обязательной инициализации переменных. Заметьте, что применяется исключительно на усмотрение программиста. А вы хотите чтобы MQ принудительно заставили инициализировать абсолютно все переменные???

Ну вот в этом и кроется причина.  Вы мало того, что знаете не очень хорошо (и сами уже какой раз об этом говорите), так ещё и VBA, который имеет мало общего с данным языком.  А я довольно хорошо знаю C++.  Это очень чёткий и строгий язык, никакие вольности там не допускаются, которые вы себе тут нафантазировали.  И MQL был создан по образу и подобию C++.  Так что давайте прекращать это.  Ознакомьтесь с C++ для начала, тогда уже будет смысл о чём-либо спорить.

p.s. Кстати я только сейчас осознал, что вы изначально увели разговор в неправильном направлении, т.к. я уже забыл с чего всё началось, а сейчас снова увидел свой изначальный код и понял, что ваш первоначальный наезд вот здесь был вообще не по теме.  И как я сразу не обратил внимания!   В моём коде статическая переменная инциализируется именно константой, как и описано в документации. Так вот проблема в том, что она ни хрена не проинициализировалась.  А вы мне начали грузить, что мол потому что её надо инициализировать константой.  И пошло-поехало...

 

Почему я не могу инициализировать массив переменными? 

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

Почему я не могу инициализировать массив переменными? 

Потому что в MQL только константами можно инициализировать.
 
Alexey Navoykov:

Ну вот в этом и кроется причина.  Вы мало того, что знаете не очень хорошо (и сами уже какой раз об этом говорите), так ещё и VBA, который имеет мало общего с данным языком.  А я довольно хорошо знаю C++.  Это очень чёткий и строгий язык, никакие вольности там не допускаются, которые вы себе тут нафантазировали.  И MQL был создан по образу и подобию C++.  Так что давайте прекращать это.  Ознакомьтесь с C++ для начала, тогда уже будет смысл о чём-либо спорить.

p.s. Кстати я только сейчас осознал, что вы изначально увели разговор в неправильном направлении, т.к. я уже забыл с чего всё началось, а сейчас снова увидел свой изначальный код и понял, что ваш первоначальный наезд вот здесь был вообще не по теме.  И как я сразу не обратил внимания!   В моём коде статическая переменная инциализируется именно константой, как и описано в документации. Так вот проблема в том, что она ни хрена не проинициализировалась.  А вы мне начали грузить, что мол потому что её надо инициализировать константой.  И пошло-поехало...

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

НЕ МОЖЕТ статическая переменная быть инициализирована раньше глобальной. И этим всё сказано.

 
Баг ChartNavigate
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

Результат на ICMarkets-Demo EURCHF M1 (макс. количество баров = 5000):

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

Совсем ничего не понимаю. Должны быть одни и те же числа. А по итогу график прыгает постоянно.

У кого-нибудь воспроизводится?

 
Alexey Viktorov:

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

НЕ МОЖЕТ статическая переменная быть инициализирована раньше глобальной. И этим всё сказано.

Извините, но я больше ну буду обращать внимание на ваши бессмысленные провокации, да ещё таким тоном. Мне и так жаль потраченного времени на бессмысленный спор с дилетантом.  Сначала вы тут предъявляли про константы, которое вообще не касалось моей ситуации, причём с тем же агрессивным гонором как и сейчас.  Теперь высасываете из пальца какие-то голословные заявления, даже не владея предметом, не понимая, как устроен язык программирования. Свои "логические мысли", домыслы и фантазии можете оставить при себе.  Мне они мало интересны.

 
Kirill Belousov:

Что происходит в момент переполнения системной переменной, которую получаем по GetTickCount() ?

Есть какая-то стандартная реакция со стороны терминала?

Есть ли необходимость программно отслеживать этот момент и внедрять реакцию?

Никакой реакции не предусмотрено

Если Вы принимаете возвращаемое значение от GetTickCount в переменную типа uint, то можете спокойно получать разницу

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

даже при переполнении Вы получите правильную разницу. Таковы особенности операций с беззнаковыми целыми. Но это годится именно для случая, когда предыдущее значение точно получено раньше тем же способом (GetTickCount) и когда предыдущее значение получено не ранее, чем за 49 дней.

Если будете проверять на больше-меньше, то понадобится больше операций, чем простое вычитание

 
fxsaber:
Баг ChartNavigate

Результат на ICMarkets-Demo EURCHF M1 (макс. количество баров = 5000):

Совсем ничего не понимаю. Должны быть одни и те же числа. А по итогу график прыгает постоянно.

У кого-нибудь воспроизводится?

С чего это баг-то?

Навигейт по чарту сразу не выполняется. Это - асинхронная команда. А результат её выполнения ничем не гарантирован.

Это как нажали кнопку PageUp, а график стоит на месте. И вдруг дёрнулся.

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