Странная ошибка при использовании Comment.

 

Вставил в советник простецкий Comment и получил гору ошибок, сломал всю голову но кое-как локализовал. Проще правда не стало. Посмотрите:

  Comment ("Сделок = ", deals, " || Вероятность  = ", probab, " || ");

Компилируется без ошибок.

  Comment ("Сделок = ", deals, " || Вероятность  = ", probab, " || a");
'u' - expression on global scope not allowed X:\VirtX\experts\DPTWIST_v1.mq4 (1, 1)
'u' - variable not defined X:\VirtX\experts\DPTWIST_v1.mq4 (1, 1)
'SellOrders' - expression on global scope not allowed X:\VirtX\experts\DPTWIST_v1.mq4 (2, 39)
'SellOrders' - variable not defined X:\VirtX\experts\DPTWIST_v1.mq4 (2, 39)
'TotalOrders' - expression on global scope not allowed X:\VirtX\experts\DPTWIST_v1.mq4 (3, 11)
'TotalOrders' - variable not defined X:\VirtX\experts\DPTWIST_v1.mq4 (3, 11)
'}' - unbalanced parentheses X:\VirtX\experts\DPTWIST_v1.mq4 (4, 10)

 

  Comment ("Сделок = ", deals, " || Вероятность  = ", probab, " || aб");

Снова без ошибок.

  Comment ("Сделок = ", deals, " || Вероятность  = ", probab, " || aбв");

'SellOrders' - expression on global scope not allowed X:\VirtX\experts\DPTWIST_v1.mq4 (2, 39)
'SellOrders' - variable not defined X:\VirtX\experts\DPTWIST_v1.mq4 (2, 39)
'TotalOrders' - expression on global scope not allowed X:\VirtX\experts\DPTWIST_v1.mq4 (3, 11)
'TotalOrders' - variable not defined X:\VirtX\experts\DPTWIST_v1.mq4 (3, 11)
'}' - unbalanced parentheses X:\VirtX\experts\DPTWIST_v1.mq4 (4, 10)


Ну и т.д.  Через символ вылезает куча ошибок которые я явно не вношу. На какие грабли я наступил? Терминал последний. Комп, терминал перегружал. Все пофиг. Пойду напьюсь по поводу праздника и убитых пары часов.

 
Каков размер кода и сколько вложенных блоков {}? Из-за больших размеров и количеств возможны непредсказуемые ошибки.
 

А если через "+" ?

 Comment ("Сделок = "+ deals+ " || Вероятность  = "+ probab+" || a");
 
FAQ:

А если через "+" ?

У него:

 '}' - unbalanced parentheses X:\VirtX\experts\DPTWIST_v1.mq4 (4, 10)

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

Возможно, но мне помогало. Вообще сам метод задания переменных через запятую ? Беспокоит пропадание ошибки при изменении количества символов. Возможно это баг свежей сборки.  

Какой билд точно ? 

 
Zhunko:
Каков размер кода и сколько вложенных блоков {}? Из-за больших размеров и количеств возможны непредсказуемые ошибки.

Код смешно 420 строк.  Коммент в основном коде функции, никуда "не вложен", ну кроме самой функции. Да и вообще по коду чрезмерных вложенностей нет (максимум 4 не больше). Но как вариант попробую с'оптимизировать. А ошибка точно непредсказуемая) Забавно, меняю Comment на Print и меняются местами ошибки, где нет ошибок у коммент, есть у принт, и наоборот)  Наверно это просто заколдовано магическая  строчка 223 в советнике.

Хотя нет, работает через строчку.... Глюк наверно просто, придется переустановить терминал.

FAQ:

А если через "+" ?

Через плюс тоже самое.

 
Ради спортивного интереса поробуйте в переменную string "собрать" весь комментарий, а в Comment() передать эту переменную.
 
Figar0:

Вставил в советник простецкий Comment и получил гору ошибок, сломал всю голову но кое-как локализовал. Проще правда не стало. Посмотрите:

Mql4 очень своеобразный язык. Я встречал в CodeBase несколько интересных кодов, но этот стиль программирования не воспринимаю. Здесь есть такое понятие, как "global scope" - глобальный уровень (глобальное окружение). К нему относится все, что лежит вне закрытых фигурных скобок нулевого уровня.

Пример от балды

int start()
{
   close();
   return(0);
}
bool g; //мы опять на глобальном уровне
int close()
{
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         Print("selected ", OrderTicket() );
         if ( OrderDelete(OrderTicket()) )
            Print("deleted ", OrderTicket() );
         else Print( GetLastError() );
      }
   }
}

: Так что ошибка "expression on global scope not allowed" говорит о том, что у вас проблема с фигурными скобками.

 
  Comment ("Сделок = ", deals, " || Вероятность  = ", probab, " || a");//сам дурак
Попробуйте.
 
Mislaid:

Mql4 очень своеобразный язык. Я встречал в CodeBase несколько интересных кодов, но этот стиль программирования не воспринимаю. Здесь есть такое понятие, как "global scope" - глобальный уровень (глобальное окружение). К нему относится все, что лежит вне закрытых фигурных скобок нулевого уровня.

Пример от балды

: Так что ошибка "expression on global scope not allowed" говорит о том, что у вас проблема с фигурными скобками.


Не спешите. Ошибка в другом, если конечно она есть
 
Vinin:

Не спешите. Ошибка в другом, если конечно она есть

Вы правы.

Спасибо всем и извините, что морочал честным людям голову)

Выяснилось, что ошибки вызывают любые изменения в советнике. Не каждый раз, а примерно через раз.  Ну а дальше просто, эти грабли я уже проходил). В процессе отладки включил много комментариев и принтов. В результате логи забили весь виртуальный диск. 2 свободных гига. Соответсвенно при попытке компиляции могло вылезать все что угодно.

 

Попутно, Всех защитников Отечества, и Всех  таковыми себя считающими - С Праздником.

Причина обращения: