Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Занеси ветку в избранное. Отслеживай изменения еще быстрее!
Alexander
1510
Alexander 2010.03.02 15:53 

Наткнулся вот на такую штуку:

int p = 0;
switch (p)
{
   case 0:
      MqlDateTime mdt;
      TimeCurrent(mdt);
      break;
}

'MqlDateTime' - initialization a variable is skipped by 'case' label

'mdt' - undeclared identifier TestPassStr.mq5

'mdt' - parameter conversion is not allowed

Если выношу MqlDateTime mdt; за блок switch - работает
Slawa
Модератор
6743
Slawa 2010.03.02 17:38  

Нельзя. Так как по свитчу можно попасть на более низкий кейс, в котором будет обращение к этой переменной. Используйте составной оператор {}

int p = 0;
switch (p)
{
   case 0:
      {
         MqlDateTime mdt;
         TimeCurrent(mdt);
      }
      break;
}

 

MetaQuotes
Админ
24621
Renat Fatkhullin 2010.03.02 18:32  

Точно также через { } и в C++ работает определение локальных переменных внутри блока case.

Alexander
1510
Alexander 2010.03.02 18:44  
Спасибо за объяснение! Буду знать 
Простак
315
Простак 2010.03.04 00:58  
Renat:

Точно также через { } и в C++ работает определение локальных переменных внутри блока case.

Однако, в С++ сия конструкция допустима и без использования { }, если ниже нет case/default.
То есть, аналог приведённого выше примера будет работать на C++ в отличие от MQL5.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий