Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 103

 
Bobs:

Поставил как Вы написали, и ничего нету ...

input int kjh456jjr785 = 0; //Этот текст будет вместо kjh456jjr785

как задано "kjh456jjr785", так это и показывает. Что-то не так?


Добавьте директиву #property strict
 

Подскажите, пожалуйста, может я чего не понял..

В справке по MQL4 указано:

Ошибки компиляции

MetaEdtior редактор mql4-программ, выдает сообщения об ошибках программы, обнаруженных встроенным компилятором на стадии компиляции. Список этих ошибок приведен ниже в таблице.

Список в справке то есть, но почему в МЕ при появлении указания на ошибку нет номера этой ошибки, почему компилятор не отражает этот номер?

 
-xlapex-:

Подскажите, пожалуйста, может я чего не понял..

В справке по MQL4 указано:

Ошибки компиляции

MetaEdtior редактор mql4-программ, выдает сообщения об ошибках программы, обнаруженных встроенным компилятором на стадии компиляции. Список этих ошибок приведен ниже в таблице.

Список в справке то есть, но почему в МЕ при появлении указания на ошибку нет номера этой ошибки, почему компилятор не отражает этот номер?


Это я обнаружил в журнале эксперта с указанием № строки, № символа и причины ошибки! Когда казалось было компилировано, но в работе эксперт остановился! :((
 
borilunad:

Это я обнаружил в журнале эксперта с указанием № строки и № символа!

Не понял ответ. Номер строки и столбца (не символа!) компилятор указывает, а вот номера ошибки, как в справке - нет. Просто интересно, почему компилятор указывает описание ошибки на английском. А в справке - номер ошибки и описание на русском. Нельзя ли сделать так, чтобы компилятор указывал номер, чтоб посмотреть, что ошибка означает по-русски :)
 
Spy:

Всё правильно. Глобальные переменные ведь внутри функции тоже видны, и если вы внутри функции объявляете локальную переменную с тем же именем, то глобальная переменная внутри этой функции становится вам недоступна, ведь вы её переопределили. А если в этой функции глобальная переменная тоже используется (вернее, вы предполагаете, что используется, забыв о том, что вы её переопределили), то такое переопределение приведёт к ошибке. Компилятор в таких случаях обязательно должен выдать предупреждение, что он и делает.


Как это глобальная переменная недоступна?

Вот, доступна:

#property strict

int i = 1;

void OnStart() {
  int i = 2;

  Print("::i = ", ::i, ", i = ", i);
}

Печатается:

::i = 1, i = 2

WinXP-32, build 610.

Несмотря на то, что в функции имеется также явное обращение к глобальной переменной, предупреждение выдаётся все равно.

Во "взрослых" языках данное предупреждение не выдаётся.

Но во "взрослых" языках, при желании, можно настроить, какие предупреждения выдавать, а какие нет.

Сомневаюсь, что в данном языке появится такая возможность.

 

Ух ты... А я и не знал, что в МКЛ можно явно указать пространство имён. Спасибо, теперь буду знать. )

Но предупреждение при переопределении всё равно должно быть. И не спорьте, и не возражайте! © )))))

 
Spy:

Ух ты... А я и не знал, что в МКЛ можно явно указать пространство имён. Спасибо, теперь буду знать. )

Но предупреждение при переопределении всё равно должно быть. И не спорьте, и не возражайте! © )))))


Ага. Если организовать импорт функции GetLastError из kernel32.dll, то ::GetLastError() и kernel32::GetLastError()- вызов 2-х разных функций.
 
-xlapex-:

Не понял ответ. Номер строки и столбца (не символа!) компилятор указывает, а вот номера ошибки, как в справке - нет. Просто интересно, почему компилятор указывает описание ошибки на английском. А в справке - номер ошибки и описание на русском. Нельзя ли сделать так, чтобы компилятор указывал номер, чтоб посмотреть, что ошибка означает по-русски :)

Не "столбца (не символа!)", а номер "символа" (буквы, включая пропуски)! А номер ошибки пишется в журнале эксперта и на языке согласно вашему коду! Я пользуюсь штатным #include <stderror.mqh> и соответственно прописываю всё, что меня интересует!
 
у меня сегодня с утра терминал обновленный работал потом вылетел и начал писать terminal.exe не является приложением Win32. Чего может быть?
 
alexandr20148:
у меня сегодня с утра терминал обновленный работал потом вылетел и начал писать terminal.exe не является приложением Win32. Чего может быть?

Или при вылете категорически поломался, или чем-то блокируется, антивирем или файером.
Причина обращения: