![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Будьте добры, объясните что происходит!
В последнем билде (306), как поперло жрать трафик, 100 метров сожрало. Попытался выяснить в чем дело, понял только, что файлы истории стали докачиваться. Выросли порядка в два раза (каждый!) на нескольких инструментах. Я имею ввиду файлы гггг.hcc, по всем открытым графикам и по всем загруженным годам. То-есть, они уже и так были загружены, и даже тест на них проходил с 2005 по 2010.07.31, а тут на тебе скачанная история начинает расти пофайлово каждый год... По идее, докачать период на 3х инструментах 2010.07.31-2010.08.08 оказалось столько же, как за весь период с 93г на десяти. Что там за новая инфа добавилась, любопытно? Просто у меня трафик ограничен, вот и испугался, что за дела...
Будьте добры, объясните что происходит!
В последнем билде (306), как поперло жрать трафик, 100 метров сожрало. Попытался выяснить в чем дело, понял только, что файлы истории стали докачиваться. Выросли порядка в два раза (каждый!) на нескольких инструментах. Я имею ввиду файлы гггг.hcc, по всем открытым графикам и по всем загруженным годам. То-есть, они уже и так были загружены, и даже тест на них проходил с 2005 по 2010.07.31, а тут на тебе скачанная история начинает расти пофайлово каждый год... По идее, докачать период на 3х инструментах 2010.07.31-2010.08.08 оказалось столько же, как за весь период с 93г на десяти. Что там за новая инфа добавилась, любопытно? Просто у меня трафик ограничен, вот и испугался, что за дела...
Несколько месяцев назад создал заявку: #11486
Ответов от разработчиков не было.
Проверьте, пожалуйста.
Разработчикам.
Просьба исправить несколько небольших багов, которые, видимо, возникли в результате слепого копирования кода.
328 билд, файл Trade.mqh, класс CTrade.
Методы: PositionModify, PositionClose, OrderOpen, OrderModify и OrderDelete в обработке ошибок стоит "Print("CTrade::PositionOpen::OrderSend: ",ResultRetcodeDescription());"
Должно быть:
"Print("CTrade::PositionModify::OrderSend: ",ResultRetcodeDescription());" ,
"Print("CTrade::PositionClose::OrderSend: ",ResultRetcodeDescription());" и т.д.
Мелочь, конечно, но при отладке сбивает с толку.
Пишу свой компонент для работы с чартом, на подобии стандартного CChart.
Возникла проблема с перегрузкой функций при наследовании.
Если все сделать по примеру CChart все вроде работает без проблем, только мне нужен немного иной подход.
Первый вариант (стандартный) компилируется без ошибок, второй выдает ошибку и компилироваться не хочет
1. объявления в CChart, работает без особых проблем.
2. Объявление в моем классе, выдает вот эту ошибку - 'ColorBackground' - ambiguous call to overloaded function
Причем, ошибка появляется если производится попытка определить текущий цвет. Если цвет меняется (устанавливается новый) ошибка не возникает.
PS
В других вариантах вот эта ошибка появляется - 'ColorBackground' - ambiguous call to overloaded function with the same parameters
Будем заявку оформлять или так разберетесь?
PPS
Все нормально компилируется только если в предке сделать вот такое объявление
Что для меня конечно допустимо, но не желательно.
Самое интересное то что при компиляции класса предка даже намеков на ошибочность действий нет, хотя в этом случае предупреждения желательны (еще желательны комментарии в справке по этому поводу)...
Все верно ругается компилятор, это не наша ошибка.
У Вас две потенциально одинаковые функции из-за дефолтных параметров. Не нужно самостоятельно создавать грабли для себя.
Все верно ругается компилятор, это не наша ошибка.
У Вас две потенциально одинаковые функции из-за дефолтных параметров. Не нужно самостоятельно создавать грабли для себя.
Я конечно все понимаю, но можно ведь было сделать предупреждение при компиляции основного класса, выступающего предком.
А то получается ситуация при которой могут быть созданы десятки функций, компилятор их пропустит, а потом со СПОКОЙСТВИЕМ МАМОНТА перед ВСЕМИРНЫМ ПОХОЛОДАНИЕМ сообщит об ошибке...
PS
Заодно и в справке об этом на мой взгляд следует упомянуть (желательно с примером как делать можно, а как нет).
Самое интересное то что при компиляции класса предка даже намеков на ошибочность действий нет, хотя в этом случае предупреждения желательны (еще желательны комментарии в справке по этому поводу)...
А это не подойдет - Перегрузка?
В пределах одного класса можно определить два или более методов, которые совместно используют одно и тоже имя, но имеют разное количество параметров. Когда это имеет место, методы называются перегруженными, а о процессе говорят как о перегрузке метода. Перегрузка метода – один из способов, с помощью которых реализуется полиморфизм. Перегрузка методов в классах производится по тем же правилам, что и перегрузка функций.
Если для вызываемой функции нет точного соответствия, то компилятор производит поиск подходящей функции по трем уровням последовательно:
Если точного соответствия ни на одном уровне не найдено, но найдено несколько подходящих функций на разных уровнях, то используется функция, найденная на наименьшем уровне. В пределах одного уровня не может быть более одной подходящей функции.
А это не подойдет - Перегрузка?
В пределах одного класса можно определить два или более методов, которые совместно используют одно и тоже имя, но имеют разное количество параметров. Когда это имеет место, методы называются перегруженными, а о процессе говорят как о перегрузке метода. Перегрузка метода – один из способов, с помощью которых реализуется полиморфизм. Перегрузка методов в классах производится по тем же правилам, что и перегрузка функций.
Если для вызываемой функции нет точного соответствия, то компилятор производит поиск подходящей функции по трем уровням последовательно:
Если точного соответствия ни на одном уровне не найдено, но найдено несколько подходящих функций на разных уровнях, то используется функция, найденная на наименьшем уровне. В пределах одного уровня не может быть более одной подходящей функции.
Как сказать. На мой взгляд нет. Прямого упоминания о подобных проблемах я лично не увидел (может плохо смотрел). Да и общие формулировки какие-то уж очень расплывчатые (правда опять же на мой взляд).
Что мы имеем:
1. Примеров как нужно нет в описаниях;
2. Точных или более детальных формулировок нет;
3. Предупреждений на уровне компилятора о возможных проблемах тоже нет.
А что есть? Есть три абзаца текста (который явно не рассчитан на простых смертных и требует дополнительной информации) + предупреждение о критической ошибке во время попытки использовать функционал уже готового и прошедшего контроль компилятора класса.
Это хорошо что я имею определенный опыт в программировании, да и класс оказался МАЛЕНЬКИЙ по моим меркам - всего каких то 1000 строк. А что будет если модуль класса будет в 10000 строк или на подобную ошибку натолкнется человек только начинающий программировать на MQL5 и никогда до этого не сталкивающийся с ООП (обычный трейдер одним словом)?
Кроме того тут явно говориться о функциях с разным количеством параметров, но нет ЯВНОГО упоминания о функциях имеющих разные параметров.
PS
Как минимум на мой взгляд нужно добавить предупреждение, позволяющее определить возможные проблемы на стадии работы над классом + внести дополнения в справку.
Как максимум еще и статью написать про возможные подводные камни при перегрузке функции в создаваемом классе.
Как минимум на мой взгляд нужно добавить предупреждение, позволяющее определить возможные проблемы на стадии работы над классом + внести дополнения в справку.
Как максимум еще и статью написать про возможные подводные камни при перегрузке функции в создаваемом классе.