Ошибки, баги, вопросы - страница 2198
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Без разницы
При вводе, как оказалось, зависит от того, какие цифры набираешь. Некоторые не позволяет набирать. А что-то - позволяет.
Странное поведение... Если набрать целую часть числа меньше 12ти знаков, то может пропустить общее количество больше 14ти.
Подождём что ответят разработчики.
В коде хорошо видно, что должна быть утечка памяти. И именно это и происходит. Однако, как написать правильно, чтобы можно было "перемножать" объекты? С оператором "*=" все понятно, как и ясно в случае структур. А с классами как реализовать этот простой функционал?
ЗЫ А этот код
Крашит ME по F7 и убивает Терминал по F5. Почему же мне так везет?!
ЗЫ А этот код
Крашит ME по F7 и убивает Терминал по F5. Почему же мне так везет?!
Возможно бесконечная рекурсия и переполнение стека.
Возможно бесконечная рекурсия и переполнение стека.
Безусловно, проблема в выделенном, но причина, похоже, глубже.
И во время выполнения, очевидно, никакой рекурсии быть не должно.
Прошу помощи сделать простую вещь
Оверхед конечно будет, но если удобство важнее...
Спасибо! Получается, что return объекта и "=" при определении объекта идут через доп. конструктор.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
если вы что-то возвращаете по значению, оно будет присвоено через копи-конструктор (если тот же тип) если это определение или оператор если нет.
если вы что-то возвращаете по значению, оно будет присвоено через копи-конструктор (если тот же тип) если это определение или оператор если нет.
Четко сформулировано, Спасибо!
ЗЫ Запринтовал Ваш код
Результат
Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. Такие объекты грохнут мою машину, т.к. предполагается работа с десятками миллионов тиков. Каждый объект будет отжирать гигабайты ОЗУ, и совсем не хочется иметь вот такие временные объекты вместо того, чтобы сразу их убивать.
Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати.
обычно временные объекты удаляются не сразу, а в конце контекста. в С++ если не ошибаюсь это прямо в стандарте прописано.
хотите быстрого удаления - управляйте контекстом.
Правда придется сделать оператор =
У меня на новом графике только при повторном запуске пример заработал (все кнопки), что само по себе непонятно. Зато теперь понятно это
Внесли правки в документацию. Проблема кода была в том, что отправка графику приказа на получение событий мыши является только постановкой команды в очередь графика. И если эта очередь не обрабатывается (например в выходные), то график не может принимать указанные события. В описание ChartSetInteger добавлено примечание и поправленный пример:
Примечание
Функция является асинхронной – это означает, что функция не дожидается выполнения команды, успешно поставленной в очередь указанного графика, а сразу же возвращает управление. Изменение свойства произойдет только после обработки команды в очереди графика. Для немедленного выполнения команд в очереди графика нужно вызвать функцию ChartRedraw.
Если требуется немедленно изменить сразу несколько свойств графика, то необходимо соответствующие функции (ChartSetString, ChartSetDouble, ChartSetString) выполнить в одном блоке кода и затем вызвать один раз ChartRedraw.
Для проверки результата выполнения можно использовать функцию, запрашивающую указанное свойство графика (ChartGetInteger, ChartGetDouble, ChartSetString). При этом необходимо иметь в виду, что данные функции являются синхронными и дожидаются результата выполнения.
Пример:
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- включение сообщений о перемещении мыши по окну чарта
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
ChartRedraw();
}