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

 
Alexey Kozitsyn:
Дорога в ад программирования вымощена глобальными переменными" (Стив Макконнелл)
Показан лишь пример отсутствия данного предупреждения. Создавать переменную как глобальную или как локальную, дело вкуса и опыта программиста.
 
Ilyas:
Предупреждение об отсутствии реального использования  локальных и глобальных переменных (простого типа или "сложного" без конструкторов) будет добавлено, но приоритет у этой задачи низкий.
Понял, спасибо. На всякий случай, попробую здесь привлечь внимание разработчиков.
 
Alexey Kozitsyn:
Одна активация на один ПК. Не важно сколько терминалов.
Есть где либо подтверждение ?
 
Vladimir Pastushak:
Есть где либо подтверждение ?

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

https://www.mql5.com/ru/market/rules 

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
В этом посте автоматом уменьшенная по разрешению картинка аж в 6 раз больше по размеру (байт), чем оригинал. Зачем?
 
Alexey Kozitsyn:
Slawa, добрый день, прокомментируете по библиотеке (вопрос выше)?

Вот так исправим

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

Вот так исправим

Да, спасибо, оптимальный вариант. Для библиотеки. А по поводу ошибки 4024?
 
Slawa:

Вот так исправим

Какой смысл это делать? Стандартную библиотеку нужно использовать не как хочется пользователю, а в строгом соответствии с идеологией ее структуры. Пользователь Alexey Kozitsyn ее использует не верно вот и получает кучу багов на выходе. Просто после создания объекта CCart нужно привязать график к объекту класса методом Attach. Этот метод перегруженный и может привязать как текущий график так и нужный. А Ваше изменение в метод Open убьет возможность работы с текущим графиком.

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

 
Alexey Kozitsyn:

Вопрос по стандартной библиотеке МТ4.

Файл Chart.mqh

Хочу открыть график. Использую метод Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe).

1. Если использовать недоступный символ, то функция ChartOpen() вернет ошибку #4024 - внутренняя ошибка. Не спорю, ошибка может быть и внутренняя, но ведь есть код ошибки гораздо более точный - #4106 - неизвестный символ. Возможно, стоит изменить код возвращаемой ошибки? Т.к. 4024 ничего не говорит разработчику о том, где искать ошибку.

2. В случае неудачи ChartOpen() присваивает полю m_chart_id значение 0, т.е. получается, что мы начинаем работать с текущим графиком, а это не верно, т.к. у нас не получилось открыть нужный нам для работы график. Следовательно, если не вызвать метод Detach(), то текущий график после работы просто закроется. Также считаю это не верным подходом. Лучше бы функция ChartOpen() возвращала -1 в случае ошибки.

Перед тем как работать с графиком, его нужно привязать к объекту класса методом Attach !!! Если не хотите работать с текущим чартом ( 0 ) то реализуйте у себя эту проверку и запрет на использование в работе текущего графика.

И что значит поработать с графиком и не закрыв его методом Detach выйти? Неужели трудно написать одну строчку в деструкторе своих классов либо в OnDeinit ? Работу с объектами нужно строго контролировать, тогда и ошибок избежите.

 
coderex:

Какой смысл это делать? Стандартную библиотеку нужно использовать не как хочется пользователю, а в строгом соответствии с идеологией ее структуры. Пользователь Alexey Kozitsyn ее использует не верно вот и получает кучу багов на выходе. Просто после создания объекта CCart нужно привязать график к объекту класса методом Attach. Этот метод перегруженный и может привязать как текущий график так и нужный. А Ваше изменение в метод Open убьет возможность работы с текущим графиком.

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

Я же выше ясно написал какой смысл это делать. Если произошла ошибка открытия графика (например, если указан некорректный символ) то, зачем-то, по аналогии с методом Attach(void), метод Open() привязывает к объекту идентификатор текущего графика. Зачем это навязывать? Если я захочу работать с текущим графиком, я, как Вы и сказали, вызову метод Attach(void) { m_chart_id=ChartID(); } и все. А тут получается явно ошибочная ситуация, в которой я почему-то начинаю работать не с тем, с чем нужно. Вообще, это проблема самой функции ChartOpen(), но раз ее не станут менять, то пусть хотя бы в библиотеке изменят.

Еще аргумент. Подумайте логически. Метод называется Open(). Он подразумевает, что что-то откроется новое! И мы с этим новым начнем работать. А тут выходит, что работаем мы со старым. Не вижу логики. А Вы, похоже, используете эту неточность в своих каких-то целях.

Этот метод перегруженный и может привязать как текущий график так и нужный. А Ваше изменение в метод Open убьет возможность работы с текущим графиком.

Что убьет? У Вас останется метод Attach(), он как и раньше будет делать то, что делал. Как Вы и сказали, сделайте проверку возвращаемого функцией Open() идентификатора и если он меньше 0, вызовите метод Attach(void). Все. Только не понятно, зачем городить такой огород, если сразу можно вызвать метод Attach(void) и привязать текущий график.

Возможно, я Вас не понимаю. Тогда приведите пример. 

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

Какое громкое заявление... Не думайте, что Вы умнее других, может оказаться, что это не так.
Причина обращения: