Скачать MetaTrader 5

SWITCH

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114283
Forex Trader  
Есть такие строки:

int init()
{
string vl="EURUSD";
}

int start()
{
switch (vl)
{
case "EURUSD": P=1; break;
case "USDCAD": P=2; break;
case "AUDUSD": P=3; break;
case "EURJPY": P=4; break;
}

компилятор ругается:

'switch' - different types in switch statement

получается, что он не видит, ЧТО vl строковая переменная или я где чего не доделал?
Forex Trader
114283
Forex Trader  
Блин, ну посмотрите же хелп! Там же написано, что свитч работает только с интовыми переменными.
Forex Trader
114283
Forex Trader  
Блин, ну посмотрите же хелп! Там же написано, что свитч работает только с интовыми переменными.


Из хелпа, набираешь в строке поиска switch:

Сравнивает значение выражения с константами во всех вариантах case и передает управление оператору, который соответствует значению выражения. Каждый вариант case может быть помечен целой или символьной константой, или константным выражением. Конста нтное выражение не может включать переменные или вызовы функций.
"EURUSD" разве не символьная константа?
про int написано, ИЛИ СИМВОЛЬНАЯ КОНСТАНТА
Forex Trader
114283
Forex Trader  
"EURUSD" разве не символьная константа?

нет. это строковая константа. символьная константа в отличие от строковой может содержать только один символ. символьная константа заключается в одиночные кавычки (строковая - в двойные).
Forex Trader
114283
Forex Trader  
"EURUSD" разве не символьная константа?

нет. это строковая константа. символьная константа в отличие от строковой может содержать только один символ. символьная константа заключается в одиночные кавычки (строковая - в двойные).


Понятно
Forex Trader
114283
Forex Trader  
"EURUSD" разве не символьная константа?

нет. это строковая константа. символьная константа в отличие от строковой может содержать только один символ. символьная константа заключается в одиночные кавычки (строковая - в двойные).


Slawa, так можно обойти?
switch (i)
{
case 1: vl="EURUSD";P=1; break;
case 2: vl="USDCAD";P=2; break;
case 3: vl="AUDUSD";P=3; break;
case 4: vl="EURJPY";P=4; break;
}
Forex Trader
114283
Forex Trader  
убрал
Forex Trader
114283
Forex Trader  
Slawa, так можно обойти?
switch (i)
   {
   case 1: vl="EURUSD";P=1; break;
   case 2: vl="USDCAD";P=2; break;
   case 3: vl="AUDUSD";P=3; break;
   case 4: vl="EURJPY";P=4; break;
   }



с точки зрения синтаксиса код написан правильно. самое главное, чтобы Вы правильно назначали значения переменной i
Forex Trader
114283
Forex Trader  
[/quote]
с точки зрения синтаксиса код написан правильно. самое главное, чтобы Вы правильно назначали значения переменной i [/quote]

в init устанавливаем i=1

start()
{
switch(i)
в самом конце советника изменяем i: (Valut_p равно количеству пар, в данном случае 4)

if (i<=Valut_p)
{
i=i+1;
}
if (i>Valut_p)
{
i=1;
}
MetaQuotes Software Corp.
Модератор
183524
MetaQuotes Software Corp.  
в init устанавливаем i=1

Если это так, то ошибка:
int init()
  {
   int i=0;
  }


Вы совершенно забыли про область видимости (так же как и в первом примере) переменных. i, определенная в init, является локальной переменной и никак не может быть доступна в другой функции.

Forex Trader
114283
Forex Trader  
в init устанавливаем i=1

Если это так, то ошибка:
int init()
  {
   int i=0;
  }


Вы совершенно забыли про область видимости (так же как и в первом примере) переменных. i, определенная в init, является локальной переменной и никак не может быть доступна в другой функции.



если i объявлена вначале, а в init только устанавливается в 1, она будут видна в других функциях?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий