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

 
Комбинатор:

Ссылка для массивов это костыль в языке MQL, а не ссылка.

А если [] это модификатор типа такой же как *, у него должен быть свой const! а не у ссылки.

Умею хоть что-то писать только на MQL.
 
A100:
Ошибка обоснована - эти идентификаторы в справке указаны как ReadOnly (не сочетаются с ChartSetInteger) https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
уже разобрался, но все равно спс :)
 
coderex:
может это поможет ?

Очень внимательно прочел. С++ много тяжелее воспринимается, чем MQL. Мало, что понял из статьи. И не понял совсем, как она касается обсуждаемого здесь.

Однако, понравилась такая возможность,

Совершенная передача(perfectforwarding)

Прежде чем описать что же это, такое вернемся к предыдущему стандарту и опишем существующую проблему. Предположим, у нас есть шаблонная функция  foo принимающая один параметр, и передающая его функции bar(T& something):

template <typename T>
void foo(T& Object)
{
    bar(Object);
}

Итак, все хорошо. Но, что если мы захотим передать, скажем, число 100 в качестве аргумента функции?

Не беда, напишем так:

template <typename T>
void foo(const T& Object)
{
    bar(Object);//Ooops
}

Но в этом случае будет ошибка компиляции, т.к. bar принимает не константную ссылку. Значит надо предоставить 2 функции bar - константную и нет. А теперь представим, что у функции не один параметр а 2,3, или 5? Получается, что подобная задача очень трудна в реализации, т.к мы имеем (2^n - 1) перегруженных функций, где n - количество аргументов функции. Если вы думаете, что такое количество параметров является плохим стилем и вообще так никто не пишет, тогда обратите свой взор на std::bind, std::make_shared и т.д.


Теперь посмотрим, какое же решение нам предоставляет новый стандарт:

template <typename T>
void foo(T&& Object)
{
    bar(std::forward<T>(Object));
}

Используя вышеприведённый код проблема с передачей параметров полностью решается, это и называется совершенной передачей, т.к. тип аргумента сохраняется между вызовами внешней функции fooи внутренней функции bar. Больше нет нужды в перегрузке кучи функций - разработчики обобщенного кода могут быть довольны.


Это решение возможно благодаря тому, что если параметром шаблона является T&&, то переданный тип сохранит себя, а std::forward нужен затем, что любой именованный тип внутри функции foo превращается в lvalue, а нам нужен исходный тип - для этого и применяется std::forward он сохраняет исходный тип аргумента и лишает его имени(получается T&&), что позволяет в дальнейшем передать его в точности в функцию bar.

"(2^n - 1) перегруженных функций, где n - количество аргументов функции" - с таким неудобством сталкивался в MQL.
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
Что это?
 
1455 - отладка на исторических данных (CTRL+F5) не работает. Появляется окно тестера, визуализация не запускается.
 
fxsaber:
1455 - отладка на исторических данных (CTRL+F5) не работает. Появляется окно тестера, визуализация не запускается.
Неправда. К тому же нет ни технических деталей, ни описание Ваших действий. Это специализированная ветка, в которой перед тем как написать о якобы найденной ошибке, нужно подготовиться и предоставить дополнительную информацию.
 
fxsaber:

Очень внимательно прочел. С++ много тяжелее воспринимается, чем MQL. Мало, что понял из статьи. И не понял совсем, как она касается обсуждаемого здесь.

Однако, понравилась такая возможность,

"(2^n - 1) перегруженных функций, где n - количество аргументов функции" - с таким неудобством сталкивался в MQL.

Это в тему о понимании rvalue / lvalue / prvalue / xvalue / gvalue, т.е. то о чем вы и говорили по сути на нескольких страницах :) Я так понимаю MQ пошли в ногу со стандартами С++, взяв оттуда на их взгляд наиболее ценное, не останавливаясь лишь на rvalue / lvalue.

Я так до конца сам еще и не осознал эти понятия, хотя логически посидеть понимаю :)

Кстати менеджер памяти в МТ5 работает непонятно как, если программа использует память по полной. На маленьких размерах не замерял.

К примеру у меня на виртуалке 4 гиг ОЗУ, 2 ядра, МТ5 v1455 х64.

Забиваю память объектами, в диспетчере задач видно, что  память забита по 1,5 гига на терминал и 1,5 гига на виртуальную память. При этом MQL_MEMORY_USED показывает используемой памяти 400 мб. До старта было на терминал в районе 140 мб, на виртуалку в районе 150 мб.

Так же заметил, что как только используемая память переваливает за 400 мб, есть возможность, что менеджер памяти не освободит ее полностью, хотя объекты реально удаляются. А поведение отладчика тут не предсказуемо - доходим до удаления объектов, дожидаемся их полного удаления, после этого прекращаем отладку (по кнопке СТОП в отладчике), он останавливается, менеджер МТ5 память системе не отдал, т.е. там так и осталось висеть 1,5 гига на терминал и 1,5 гига на виртуальную память. А вот МТ5 сам отладку так и не завершил, хотя в МЕ показано, что отладка завершена. Если память объектами забиваю менее 400 мб, то все происходит нормально, кроме освобождения памяти.

Память освобождается только после удаления задачи терминала из списка запущенных задач. 

 
Karputov Vladimir:
Неправда. К тому же нет ни технических деталей, ни описание Ваших действий. Это специализированная ветка, в которой перед тем как написать о якобы найденной ошибке, нужно подготовиться и предоставить дополнительную информацию.

Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.

Беру любой из стандартных советников и в метаэдиторе нажимаю CTRL+F5. Выскакивает основное окно тестера с настройками, что заданы в метаэдиторе. Визуализация не запускается. 

В логе

2016.10.15 10:06:09     Tester  Leverage 1:100 set error


 

 
fxsaber:
Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.

Вы даже не осознали о чём я сказал. 

Что Вы делали перед тем как запустить отладку на истории? Вы настроили MetaEditor (вкладка "Сервис" - "Настройки" - "Отладка")? Приведите скриншот из MetaEditora (вкладка "Сервис" - "Настройки" - "Отладка"), что пишется в Тестере во вкладке "Журнал"? Что пишется в Визуализаторе во вкладке "Журнал"?

 
fxsaber:

Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.

Беру любой из стандартных советников и в метаэдиторе нажимаю CTRL+F5. Выскакивает основное окно тестера с настройками, что заданы в метаэдиторе. Визуализация не запускается. 

MACD Sample запускается нормально. Может чего с настройками намудрили?
Причина обращения: