MetaTrader 4 Client Terminal build 604 - страница 29

Zhunko:
Классы. Пространства имён, на крайний случай.

Внутри классов тоже есть внешние переменные относительно внутренних.
виноват то запуск на оффлайн графике был случайно.

вот такая проблемка - запускаю эксперта на визуале,

нажимаю на кнопку открыть сделку - панель стоит на оффлайн графике - нажимаю кнопку - открывается на счете :-)

Andrei01:
Внутри классов тоже есть внешние переменные относительно внутренних.

Но они неглобальные.

Сейчас в С++ проверил. Ошибок и предупреждений на уровне 4 нет.

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

У меня ниразу не было такой проблемы в MQL.

Vladon:


у емня норм ванклик пашет, свой собственный. а ВЫ не про это?

Да рынок стопориться когда ордер пытается открыться - согласен.


свой собственный оно понятно, что работает

фокус покус:

слева - моя папка с терминала

справа - сохраняю эксперта в этой папке

Фокус: в папке эксперта нет, а компилятор его видит как уже есть он.

Zhunko:

Но они неглобальные.

Сейчас в С++ проверил. Ошибок и предупреждений на уровне 4 нет.

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

У меня ниразу не было такой проблемы в MQL.

Эти предупреждения никакой информации не несут а просто мешаются... Непонятно для чего они нужны...
Andrei01:
Какой тут конфликт? Редактор ругается на декларацию новой переменной хотя этого тут нет и в помине.

Компилятор не ругается ни о чём. Он вас предупреждает. А предупреждает он вот о чём:

Так как у вас есть глобальная переменная с именем num, то она должна быть видна во всех функциях программы. В одной из функций программы вы объявляете переменную с таким же именем num. Так как видимость этой переменной ограничено пределами функции, в которой она объявлена, то компилятор вас предупреждает, что в данной функции от вас будет скрыто значение глобальной переменной num - так как в этой функции есть такая же переменная и будет использоваться значение именно этой локальной переменной.

А ведь компилятор не знает значение какой именно переменной вы желаете использовать в этой функции - глобальной, или той, что объявлена локально. Посему он вас предупреждает - значение глобальной переменной внутри этой функции для вас скрыто, а доступно значение локальной переменной. Вам решать правильно вы используете эту переменную, или нет. Но компилятор видит вероятный конфликт и сообщает об этом.

Всё верно он делает.

artmedia70:

Компилятор не ругается ни о чём. Он вас предупреждает. А предупреждает он вот о чём:

Так как у вас есть глобальная переменная с именем num, то она должна быть видна во всех функциях программы. В одной из функций программы вы объявляете переменную с таким же именем num. Так как видимость этой переменной ограничено пределами функции, в которой она объявлена, то компилятор вас предупреждает, что в данной функции от вас будет скрыто значение глобальной переменной num - так как в этой функции есть такая же переменная и будет использоваться значение именно этой локальной переменной.

А ведь компилятор не знает значение какой именно переменной вы желаете использовать в этой функции - глобальной, или той, что объявлена локально. Посему он вас предупреждает - значение глобальной переменной внутри этой функции для вас скрыто, а доступно значение локальной переменной. Вам решать правильно вы используете эту переменную, или нет. Но компилятор видит вероятный конфликт и сообщает об этом.

Всё верно он делает.

До меня дошло, а чём Андрей говорит.

В С++ это правило. Предупреждений никаких нет. Типа, это и так все знают.

В MQL4 сделали такое предупреждение на всякий случай. Сервис такой. Андрею он не нравится :-)

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