init function defined - start function's parameters will be ignored as expert properties - страница 2

 
Ant_TL:

С чего Вы сделали такой вывод? Судя по тексту сообщения, компилятор сообщает о том, что из-за определения функции init, параметры функции start будут игнорироваться как свойства советника. Белиберда какая-то.

Функции init и deinit прекрасно работают в пользовательских библиотеках. Наверное, Вы плохо помните, что именно написано в справке.

Чего же людям головы морочить и играть в угадайку. У вас все коды на руках. Спланировали бы эксперимент и потом людям рассказали. Кроме того, в справке, бывает, написано по русски и на английском разные вещи.
 
Mislaid:
Чего же людям головы морочить и играть в угадайку. У вас все коды на руках. Спланировали бы эксперимент и потом людям рассказали. Кроме того, в справке, бывает, написано по русски и на английском разные вещи.

Я никому не морочу голову и в угадайку не играю. Какие тут могут быть эксперименты? Я не знаю, откуда появляется это предупреждение и каким экспериментом определить точные причины его возникновения. Оно произвольно появляется и исчезает, при том, что функции init и deinit как были в библиотеке с самого начала, так никуда и не девались. А никакой функции start, о которой также говорится в тексте предупреждения, в библиотеке, разумеется, не было и нет. Вопрос был конкретно для тех, кто сталкивался с этим предупреждением, и точно знает, в каких случаях оно должно появляться. Если пользователям это не ясно, то было бы отлично, если бы отреагировали разработчики терминала. В справке и на форуме упоминания об этом предупреждении нет.

 
Ant_TL:

С чего Вы сделали такой вывод? Судя по тексту сообщения, компилятор сообщает о том, что из-за определения функции init, параметры функции start будут игнорироваться как свойства советника. Белиберда какая-то.

Функции init и deinit прекрасно работают в пользовательских библиотеках. Наверное, Вы плохо помните, что именно написано в справке.

Может неправильно выразился. Системные функции, конечно, можно объявить в библиотеке. К чему это приведёт - не знаю. Но точно, что Вы не сможете их использовать за пределами библиотеки.

Переименуйте Ваши функции. Хотя бы так: init --> Init.

 
Zhunko:

Может неправильно выразился. Системные функции, конечно, можно объявить в библиотеке. К чему это приведёт - не знаю. Но точно, что Вы не сможете их использовать за пределами библиотеки.

Переименуйте Ваши функции. Хотя бы так: init --> Init.

Функции init и deinit в библиотеке успешно служат той же самой цели, что и в советниках и индикаторах - автоматически выполняются терминалом при инициализации и деинициализации советника, скрипта или индикатора, использующего данную библиотеку, без необходимости их вызывать явно из функций init и deinit самого советника/индикатора. Предупреждение, о котором идет речь, не связано с использованием в библиотеке этих функций (точнее, может как-то и связано, но я не знаю, как) - так как я их использую в этой же библиотеке долгое время без всяких предупреждений. Зачем их переименовывать, если они успешно служат своей цели?

 
Ant_TL:

Функции init и deinit в библиотеке успешно служат той же самой цели, что и в советниках и индикаторах - автоматически выполняются терминалом при инициализации и деинициализации советника, скрипта или индикатора, использующего данную библиотеку, без необходимости их вызывать явно из функций init и deinit самого советника/индикатора. Предупреждение, о котором идет речь, не связано с использованием в библиотеке этих функций (точнее, может как-то и связано, но я не знаю, как) - так как я их использую в этой же библиотеке долгое время без всяких предупреждений. Зачем их переименовывать, если они успешно служат своей цели?

Вы попробовали? Это же не сложно. Всего лишь два символа изменить.

В документации явно не прописано про специальные функции в библиотеке. Там написано про инициализацию и деинициализацию модуля. Модуль может быть любой.

Про start есть это:

start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.

Опять ничего про библиотеки не написано. Возможно в новом компиляторе чего-нибудь поменяли. И это не противоречит справке. Просто ранее Вы использовали недокументированные возможности. Теперь их больше нет. Проверте. Тем более, что это не сложно. Займёт 10 секунд.

 
Zhunko:
 

В документации явно не прописано про специальные функции в библиотеке. Там написано про инициализацию и деинициализацию модуля. Модуль может быть любой.

Просто ранее Вы использовали недокументированные возможности.

Я не хочу гадать, какие там недокументированные возможности я мог нарушить. Я задал вопрос на официальном форуме разработчиков, надеясь на точный и однозначный ответ, а не гадание на кофейной гуще. Функции инициализации и деинициализации библиотечного модуля прекрасно работают. Если функцию init убрать, то предупреждение исчезает. Но о чем было предупреждение? О том, что функцию init нельзя использовать в библиотечном модуле? Нет, это не так. Предупреждение было о чем-то неведомом, что, тем не менее, связано каким-то образом с функцией init. Моя задача - не избавиться от этого предупреждения, а точно понять, по какой причине оно вылезает.

 
МТ4 есть достаточное количество недокументированных возможностей и фич, и вот они имеют свойство в один прекрасный момент заканчиваться с новым билдом. Хорошо бы этот момент выяснить.
 
Ant_TL:

Я не хочу гадать, какие там недокументированные возможности я мог нарушить. Я задал вопрос на официальном форуме разработчиков, надеясь на точный и однозначный ответ, а не гадание на кофейной гуще. Функции инициализации и деинициализации библиотечного модуля прекрасно работают. Если функцию init убрать, то предупреждение исчезает. Но о чем было предупреждение? О том, что функцию init нельзя использовать в библиотечном модуле? Нет, это не так. Предупреждение было о чем-то неведомом, что, тем не менее, связано каким-то образом с функцией init. Моя задача - не избавиться от этого предупреждения, а точно понять, по какой причине оно вылезает.

Вот выяснили наконец-то! Считаю, что это ошибка компилятора. Сообщите в техподдержку или в тему выше про 500 билд.

Конечно, обидно, что инит и деинит в библиотеке не будут работать. Ведь, MQL4-библиотеки единственная возможность хоть как-то ООП использовать в MQL4.

 
Zhunko:

Вот выяснили наконец-то! Считаю, что это ошибка компилятора. Сообщите в техподдержку или в тему выше про 500 билд.

Конечно, обидно, что инит и деинит в библиотеке не будут работать. Ведь, MQL4-библиотеки единственная возможность хоть как-то ООП использовать в MQL4.

 Простите, что Вы выяснили, и почему инит и деинит не будут работать? :)

1) Они прекрасно работают, предупреждение им никак не мешает

2) В тесте предупреждения нет ни слова о том, что init не будет работать или не будет запускаться и т.п. Там написана какая-то белиберда! Какой смысл в предложении "init function defined - start function's parameters will be ignored as expert properties"?

3) Я не обновлял билд, у меня стоит 482 :) 

 
FAQ:
МТ4 есть достаточное количество недокументированных возможностей и фич, и вот они имеют свойство в один прекрасный момент заканчиваться с новым билдом. Хорошо бы этот момент выяснить.

 Почему Вы считаете возможность использовать init и deinit в библиотеках недокументированной? В справке написано:

 "init() - функция, вызывающаяся в процессе инициализации модуля." 

 "deinit() - функция, вызывающаяся в процессе деинициализации модуля." 

Пользовательская библиотека является отдельным модулем. Соответственно, возможность использования init и deinit в библиотеках является документированной.

Причина обращения: