Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1333
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за ответ, вовсе вы не злой)
Теперь все стало ясно)
UPD
Вот такая конструкция тоже работает
Обратите внимание на то, что возвращает метод At(). Если вернёт NULL, то вылетите по критической ошибке. Прежде, чем обращаться по указателю к объекту, проверьте его на не NULL
Уже заметил)
Значит, выход - объявлять глобально пустые объекты....
А если заранее неизвестно, сколько их будет ? Просто объявить "с запасом" ? :)
P.S. Во встроенной справке не нашел такой способ объявления объектов
Когда-то Артём писал мне этот класс. Я в подробностях объяснить как работает не могу. Но Артём увидев вспомнит и сможет объяснить. В общем вот сам класс
И вот цикл создания указателей в OnInit()
и в OnTimer()
ArraySize(Rates) это размер массива структур в котором перечислены символы с которыми надо работать.
Когда-то Артём писал мне этот класс. Я в подробностях объяснить как работает не могу. Но Артём увидев вспомнит и сможет объяснить. В общем вот сам класс
И вот цикл создания указателей в OnInit()
и в OnTimer()
ArraySize(Rates) это размер массива структур в котором перечислены символы с которыми надо работать.
Здесь:
я бы делал до total - просто по причине, что ты с массива Rates читаешь символы (верно?), создаёшь экземпляры класса нового бара и добавляешь их в список.
При любой ошибке добавления, размер списка указателей на экземпляры класса нового бара не будет совпадать с размером массива Rates.
В общем, как-то так наверное:
А вот тут нужно тоже проверять на успешность добавления в список:
как-то так:
во избежание утечки памяти при ошибке добавления указателя на новый объект в списокЗдесь:
я бы делал до total - просто по причине, что ты с массива Rates читаешь символы (верно?), создаёшь экземпляры класса нового бара и добавляешь их в список.
При любой ошибке добавления, размер списка указателей на экземпляры класса нового бара не будет совпадать с размером массива Rates.
В общем, как-то так наверное:
А вот тут нужно тоже проверять на успешность добавления в список:
как-то так:
во избежание утечки памяти при ошибке добавления указателя на новый объект в списокСпасибо. Я понял, исправлю на так…:)))
Ненавижу оператор continue; и стараюсь им не пользоваться. Исключительно в безвыходных случаях.
чем отличается от
Другое дело если при ошибке удалить несостоявшийся указатель… Но и тут можно обойтись без ненавистного мне continue; просто удалив Print(). Он был нужен во время отладки и попытки понять происходящее, а если во время работы произойдёт какая-то ошибка, я по любому не пойму что не так… Мне проще переустановить ОС, чем разобраться в логах.Раз уж пошёл разговор об этом, расскажи пожалуйста, только не влезая в дебри, чем отличается указатель от переменной класса и что предпочтительней. В подробностях, в таких которые понять сложно я могу в тырнете почитать. Мне достаточно, так сказать, поверхностного понимания…
Обратите внимание на то, что возвращает метод At(). Если вернёт NULL, то вылетите по критической ошибке. Прежде, чем обращаться по указателю к объекту, проверьте его на не NULL
Артем, спасибо за ценное замечание)
Спасибо. Я понял, исправлю на так…:)))
Ненавижу оператор continue; и стараюсь им не пользоваться. Исключительно в безвыходных случаях.
чем отличается от
Итерацию цикла не закончит и новую не начнет, а перейдет к следующему Иф. Логика поменяется.
Когда-то Артём писал мне этот класс. Я в подробностях объяснить как работает не могу. Но Артём увидев вспомнит и сможет объяснить. В общем вот сам класс
Алексей, спасибо за столь развернутый ответ.
В приведенном фрагменте кода непонятно назначение переменной ret...
Для чего она вычисляется, если в любом случае метод возвращает array[0] ?
З.Ы.
А для чего в методе класса использовать this ? Мы ведь работает с членами этого конкретного класса...
Спасибо. Я понял, исправлю на так…:)))
Ненавижу оператор continue; и стараюсь им не пользоваться. Исключительно в безвыходных случаях.
чем отличается от
Другое дело если при ошибке удалить несостоявшийся указатель… Но и тут можно обойтись без ненавистного мне continue; просто удалив Print(). Он был нужен во время отладки и попытки понять происходящее, а если во время работы произойдёт какая-то ошибка, я по любому не пойму что не так… Мне проще переустановить ОС, чем разобраться в логах.Раз уж пошёл разговор об этом, расскажи пожалуйста, только не влезая в дебри, чем отличается указатель от переменной класса и что предпочтительней. В подробностях, в таких которые понять сложно я могу в тырнете почитать. Мне достаточно, так сказать, поверхностного понимания…
Итерацию цикла не закончит и новую не начнет, а перейдет к следующему Иф. Логика поменяется.
Алексей, спасибо за столь развернутый ответ.
В приведенном фрагменте кода непонятно назначение переменной ret...
Для чего она вычисляется, если в любом случае метод возвращает array[0] ?