Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 722

 
Вариант кода
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
даёт предупреждение:
declaration of 'Err' hides global declaration at line 51
Другой вариант кода
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
даёт ошибку:
'Err' - declaration without type 
Как здесь написать правильно?
 
Zver4991:
почему виснет не могу понять
int i// Индекс бара
while
(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.
 
Shurkin:
int i// Индекс бара
while
(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.

 

точно забыл про...спс 

i--;

[Удален]  
//--------------------------------------------------------------------
int Count=0;                                    
//--------------------------------------------------------------------
void OnTick()   
  {
   Count++;
   Comment("Новый тик ", Count);
   //if(Count>2) ExpertRemove();
  }
//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   Comment("Сработала ф-ия deinit() при выгрузке");
  }
//--------------------------------------------------------------------

Если раскомментировать  if(Count>2) ExpertRemove(), и выход происходит по этой функции, тогда после выгрузки советника, комментарий "Сработала ф-ия deinit() при выгрузке" остается отображенным на графике.

 Кто-нибудь знает почему, если такой советник удалить с графика через контестное меню, то Comment() из OnDeinit на графике не остается?

[Удален]  

Shurkin:

Вариант кода
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
даёт предупреждение:
declaration of 'Err' hides global declaration at line 51
Другой вариант кода
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
даёт ошибку:
'Err' - declaration without type 
Как здесь написать правильно?

Это ошибка дизайна языка в целом, защищаемая на самом высоком уровне. Два факта:

1. Язык MQL4++ позволяет иметь сокрытие имён переменных во вложенных областях видимости.

2. При сокрытии имён переменных во вложенных областях видимости в обязательном порядке выдаётся предупреждение, которое нельзя отключить.

Отвечая на вопрос, могу сказать, что возможны не менее двух вариантов:

1. Используйте сокрытие имён, но миритесь с наличием предупреждений (плохо, можно не заметить среди множества предупреждений о сокрытии имён действительно важное другое предупреждение, которое могло бы помочь обнаружить и устранить потенциальную ошибку).

2. Не используйте сокрытия имён, несмотря на то, что в языке такая возможность имеется. Например, назовите глобальную переменную gErr, а не Err.

Вместо запрещения сокрытия имён, введено неубираемое предупреждение. Пользуйтесь.

 

По-русски: правильный вариант - первый, на предупреждения забейте. 

 
tara:

По-русски: правильный вариант - первый, на предупреждения забейте. 

 

Спасибо.
 
можна ли где посмотреть описания функций в инклюд файлах?
 
Zver4991:
можна ли где посмотреть описания функций в инклюд файлах?

Если это файлы из стандартной библиотеки, то конечно можно. Нужно открыть этот самый include файл, а в нём Вы уже увидите примерно следующее:

#include <Object.mqh>
//+------------------------------------------------------------------+
//| Class CChart.                                                    |
//| Purpose: Class of the "Chart" object.                            |
//|          Derives from class CObject.                             |
//+------------------------------------------------------------------+
class CChart : public CObject
Дальше выделить "ССhart" и скопировать. Нажать F1 - откроется справка и во вкладке "Поиск" вставить искомый текст + Enter. 
 

Возник такой вопрос - в Советнике создается массив, для которого в deinit() не предусмотрели ArrayFree. Значит ли это что с каждым последующим тестированием Советник будет отбирать под этот массив все больше и больше памяти? Или память все же каким-то образом будет высвобождаться по завершении каждого цикла тестирования?