Примеры: Типичные ошибки в программах на MQL4 и методы их устранения

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
206572
MetaQuotes Software Corp.  

New article Типичные ошибки в программах на MQL4 и методы их устранения has been published:

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

Author: MetaQuotes Software Corp.

Vladislav Andruschenko
191169
Vladislav Andruschenko  

Спасибо.

Вывел для себя некоторые новые фишки по исправлению.

iglob
9
iglob  

Здравствуйте! А как быть с такой ошибкой:

Файлы:
qpfm3l.jpg 12 kb
2z2.jpg 72 kb
Ruslan Khasanov
3089
Ruslan Khasanov  
iglob:

Здравствуйте! А как быть с такой ошибкой:

Необходимо задать размер второго измерения массива.

Много интересного и познавательного про массивы

Vobler Vob
176
Vobler Vob  

можете исправить строку

if (URLock == true)  
 {
  double  URLock ;

  if (SellLots_b - BuyLots_b != 0)

причина: declaration of 'URLock' hides global declaration

и ещё пример

int init() {
   gd_348 = MarketInfo(Symbol(), MODE_SPREAD)  * Point;
   switch  MarketInfo(Symbol(), MODE_MINLOT) {
   case 0.001:
      gd_256 = 3;
      break;
   case 0.01:
      gd_256 = 2;
      break;
   case 0.1:
      gd_256 = 1;
      break;
   case 1.0:
      gd_256 = 0;

   }

причина:'MarketInfo' - syntax error

Очень хотелось бы исправить Спасибо...

Kino
6772
Kino  
vobler63:

можете исправить строку

if (URLock == true)  
 {
  double  URLock ;

  if (SellLots_b - BuyLots_b != 0)

причина: declaration of 'URLock' hides global declaration

и ещё пример

int init() {
   gd_348 = MarketInfo(Symbol(), MODE_SPREAD)  * Point;
   switch  MarketInfo(Symbol(), MODE_MINLOT) {
   case 0.001:
      gd_256 = 3;
      break;
   case 0.01:
      gd_256 = 2;
      break;
   case 0.1:
      gd_256 = 1;
      break;
   case 1.0:
      gd_256 = 0;

   }

причина:'MarketInfo' - syntax error

Очень хотелось бы исправить Спасибо...

if (URLock == true)   
 {
  double  URLock ;

  if (SellLots_b - BuyLots_b != 0)

причина: declaration of 'URLock' hides global declaration

и ещё пример

int init() {
   gd_348 = MarketInfo(Symbol(), MODE_SPREAD)  * Point;
   switch  MarketInfo(Symbol(), MODE_MINLOT) {
   case 0.001:
      gd_256 = 3;
      break;
   case 0.01:
      gd_256 = 2;
      break;
   case 0.1:
      gd_256 = 1;
      break;
   case 1.0:
      gd_256 = 0;

   }
Вставляйте код пожалуйста правильно, через кнопку "SRC"
Vobler Vob
176
Vobler Vob  
Vladimir Zubov:
Вставляйте код пожалуйста правильно, через кнопку "SRC"
int init() {
   gd_348 = MarketInfo(Symbol(), MODE_SPREAD)  * Point;
   switch  MarketInfo(Symbol(), MODE_MINLOT) {
   case 0.001:
      gd_256 = 3;
      break;
   case 0.01:
      gd_256 = 2;
      break;
   case 0.1:
      gd_256 = 1;
      break;
   case 1.0:
      gd_256 = 0;
   }
   return (0);

ОШИБКА:'MarketInfo' - syntax error

и другое предупреждение
 if (URLock == true)   
 {
  double  URLock ;
  if (SellLots_b - BuyLots_b != 0)
  {
   if (SellLots_b > BuyLots_b)
   {
предупреждение:declaration of 'URLock' hides global declaration

это части из кодов с ошибками...
Alexey Volchanskiy
29204
Alexey Volchanskiy  
vobler63:

Тут две ошибки сразу

switch  MarketInfo(Symbol(), MODE_MINLOT) { // почему выражение не в круглых скобках??

Оператор-переключатель switch

Сравнивает значение выражения с константами во всех вариантах case и передает управление оператору, который соответствует значению выражения. Каждый вариант case может быть помечен целой константой, символьной константой или константным выражением. Константное выражение не может включать переменные или вызовы функций. Выражение оператора switch должно быть целого типа.

MarketInfo возвращает тип double, можно выкрутится вот так

switch  (int(MarketInfo(Symbol(), MODE_MINLOT)*10000)) {

Ну и значения в case тоже умножить на 10000

Vladimir Pastushak
141013
Vladimir Pastushak  
А с каких это пор на форуме обсуждаются и правятся куски декомпилированного/ворованного кода ?
Vobler Vob
176
Vobler Vob  
Alexey Volchanskiy:

Тут две ошибки сразу

Оператор-переключатель switch

Сравнивает значение выражения с константами во всех вариантах case и передает управление оператору, который соответствует значению выражения. Каждый вариант case может быть помечен целой константой, символьной константой или константным выражением. Константное выражение не может включать переменные или вызовы функций. Выражение оператора switch должно быть целого типа.

MarketInfo возвращает тип double, можно выкрутится вот так

Ну и значения в case тоже умножить на 10000

Попробуйте исправить...Спасибо,что обратили внимание.

<НЕДЕЛЯ БАНА ЗА ДЕКОМПИЛИРОВАННЫЙ КОД>
znn1950
1
znn1950  

В‌ыдается сообщение, как его исправить?

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Gi_124) {
            Li_24 = OrderType();
            Ld_28 = NormalizeDouble(OrderStopLoss(), Digits);
            Ld_36 = NormalizeDouble(OrderTakeProfit(), Digits);
            Ld_44 = NormalizeDouble(OrderOpenPrice(), Digits);
            Li_8 = OrderTicket();
            Ld_60 = 0;
            Ld_68 = 0;
            if (Li_24 == OP_BUY) {
              Li_16++;
              Ld_0 += OrderProfit();
               Li_88 = 1;
               if (Ld_28 == 0.0 && Stoploss >= Li_12 && Stoploss != 0) Ld_60 = NormalizeDouble(Bid - Stoploss * Point, Digits);
               else Ld_60 = Ld_28;
               if (Ld_36 == 0.0 && Takeprofit >= Li_12 && Takeprofit != 0) Ld_68 = NormalizeDouble(Ask + Takeprofit * Point, Digits);
               else Ld_68 = Ld_36;
               if (NoLoss >= Li_12 && Ld_28 < Ld_44 && NoLoss != 0)

possible use of uninitialized variable 'Li_16' BreakdownLevelDay.mq4 80 15


Файлы:
22.jpg 124 kb
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий