Если раскомментировать if(Count>2) ExpertRemove(), и выход происходит по этой функции, тогда после выгрузки советника, комментарий "Сработала ф-ия deinit() при выгрузке" остается отображенным на графике.
Кто-нибудь знает почему, если такой советник удалить с графика через контестное меню, то Comment() из OnDeinitна графике не остается?
int Err; //Номер ошибкиint FunErr(int Err) // Функция обработки ошибок
даёт предупреждение:
declaration of 'Err' hides global declaration at line 51
Другой вариант кода
int Err; //Номер ошибкиint FunErr(Err) // Функция обработки ошибок
даёт ошибку:
'Err' - declaration without type
Как здесь написать правильно?
Это ошибка дизайна языка в целом, защищаемая на самом высоком уровне. Два факта:
1. Язык MQL4++ позволяет иметь сокрытие имён переменных во вложенных областях видимости.
2. При сокрытии имён переменных во вложенных областях видимости в обязательном порядке выдаётся предупреждение, которое нельзя отключить.
Отвечая на вопрос, могу сказать, что возможны не менее двух вариантов:
1. Используйте сокрытие имён, но миритесь с наличием предупреждений (плохо, можно не заметить среди множества предупреждений о сокрытии имён действительно важное другое предупреждение, которое могло бы помочь обнаружить и устранить потенциальную ошибку).
2. Не используйте сокрытия имён, несмотря на то, что в языке такая возможность имеется. Например, назовите глобальную переменную gErr, а не Err.
Вместо запрещения сокрытия имён, введено неубираемое предупреждение. Пользуйтесь.
Zver4991: можна ли где посмотреть описания функций в инклюд файлах?
Если это файлы из стандартной библиотеки, то конечно можно. Нужно открыть этот самый include файл, а в нём Вы уже увидите примерно следующее:
#include <Object.mqh>
//+------------------------------------------------------------------+//| Class CChart. |//| Purpose: Class of the "Chart" object. |//| Derives from class CObject. |//+------------------------------------------------------------------+class CChart : public CObject
Дальше выделить "ССhart" и скопировать. Нажать F1 - откроется справка и во вкладке "Поиск" вставить искомый текст + Enter.
Возник такой вопрос - в Советнике создается массив, для которого в deinit() не предусмотрели ArrayFree. Значит ли это что с каждым последующим тестированием Советник будет отбирать под этот массив все больше и больше памяти? Или память все же каким-то образом будет высвобождаться по завершении каждого цикла тестирования?
почему виснет не могу понять
while(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.
int i// Индекс бара
while(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.
точно забыл про...спс
i--;
Если раскомментировать if(Count>2) ExpertRemove(), и выход происходит по этой функции, тогда после выгрузки советника, комментарий "Сработала ф-ия deinit() при выгрузке" остается отображенным на графике.
Кто-нибудь знает почему, если такой советник удалить с графика через контестное меню, то Comment() из OnDeinit на графике не остается?
Shurkin:
Это ошибка дизайна языка в целом, защищаемая на самом высоком уровне. Два факта:
1. Язык MQL4++ позволяет иметь сокрытие имён переменных во вложенных областях видимости.
2. При сокрытии имён переменных во вложенных областях видимости в обязательном порядке выдаётся предупреждение, которое нельзя отключить.
Отвечая на вопрос, могу сказать, что возможны не менее двух вариантов:
1. Используйте сокрытие имён, но миритесь с наличием предупреждений (плохо, можно не заметить среди множества предупреждений о сокрытии имён действительно важное другое предупреждение, которое могло бы помочь обнаружить и устранить потенциальную ошибку).
2. Не используйте сокрытия имён, несмотря на то, что в языке такая возможность имеется. Например, назовите глобальную переменную gErr, а не Err.
Вместо запрещения сокрытия имён, введено неубираемое предупреждение. Пользуйтесь.
По-русски: правильный вариант - первый, на предупреждения забейте.
По-русски: правильный вариант - первый, на предупреждения забейте.
можна ли где посмотреть описания функций в инклюд файлах?
Если это файлы из стандартной библиотеки, то конечно можно. Нужно открыть этот самый include файл, а в нём Вы уже увидите примерно следующее:
Дальше выделить "ССhart" и скопировать. Нажать F1 - откроется справка и во вкладке "Поиск" вставить искомый текст + Enter.Возник такой вопрос - в Советнике создается массив, для которого в deinit() не предусмотрели ArrayFree. Значит ли это что с каждым последующим тестированием Советник будет отбирать под этот массив все больше и больше памяти? Или память все же каким-то образом будет высвобождаться по завершении каждого цикла тестирования?