в мт4 надо #property stirct
#property strict здесь не поможет.
Да, в компиляторе МТ4 не совсем строго выдерживается правило видимости переменных.
На мой взгляд, здесь должен быть варнинг - подобные двойные объявления в разных блоках одной и той же переменной могут быть связаны с логическими ошибками, и компилятор о них должен предупреждать. Однако, код здесь должен быть валидным.
Laryx:
#property strict здесь не поможет.
Прежде чем заявлять, проверьте сами. Все нормально компилируется
#property strict //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class cClass { public: cClass(void) {}; void mClass(); ~cClass(void) {}; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void cClass::mClass(void) { char param=1; switch(param) { case 0: {char i; i=0;} case 1: {char i; i=1;} //нет никакой ошибки default: return; } return; } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- } //+------------------------------------------------------------------+
Rosh:
Прежде чем заявлять, проверьте сами. Все нормально компилируется
У меня раньше не помогало, я точно помню, нарывался на такую же ошибку (с самого начала всегда использую strict).
Значит, это уже исправили.
#property strict помогает, все работает.
Всем спасибо за помощь.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В справочнике по MQL4 и MQL5 раздел "Область видимости и время жизни переменных" абсолютно одинаков. И, вроде как, в MT4 можно использовать программы написанные на MQL5.
Вопрос: Почему абсолютно одинаковый код на MQL5 компилируется по разному в MT4 и MT5?
--------------
class cClass
{
public:
cClass(void) {};
void mClass();
~cClass(void) {};
};
void cClass::mClass(void)
{
char param=1;
switch(param)
{
case 0: {char i; i=0;}
case 1: {char i; i=1;} //Ошибка - 'i' - variable already defined
default:
return;
}
return;
}
--------------
В MetaEditor от MT5 все прекрасно, а вот в MT4 данный код не компилируется и выдает ошибку - 'i' - variable already defined.
Версии MT последние. Если я правильно понимаю, то результат компиляции должен быть одинаковым и там, и там. Но получается, что я чего-то не понимаю.
Объясните, пожалуйста, это так задумано или ...? В чем отличия MQL5 для разных версий MT?