Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)" - страница 6

 

Здравствуйте

кто нибудь нашёл причину глюка постом выше?

выдаёт ошибку "array out of range in 'WndEvents.mqh' (287,72)"

 
Спартак Угланов:

Здравствуйте

кто нибудь нашёл причину глюка постом выше?

выдаёт ошибку "array out of range in 'WndEvents.mqh' (287,72)"

воткни там проверку на выход за пределы и все

 
Konstantin:

воткни там проверку на выход за пределы и все

мысль конечно интересная, а как?


      int available_elements_total=CWndContainer::AvailableElementsTotal(m_active_window_index);
      int ass = ArraySize(m_wnd[m_active_window_index].m_available_elements);
      Print("ass = ",ass," available_elements_total = ",available_elements_total);
      for(int e=0; e<available_elements_total; e++)
        {
         CElement *el=m_wnd[m_active_window_index].m_available_elements[e];


12 элементов, никакого аут оф рейндж быть не должно, теоретиччски

(пример TradePanelTest из цикла статей)

 
Спартак Угланов:

мысль конечно интересная, а как?



12 элементов, никакого аут оф рейндж быть не должно, теоретиччски

(пример TradePanelTest из цикла статей)

ну если ошибка присутствует, значит она есть, прогони отладчиком, это самый верный способ увидеть что там творится

 
Konstantin:

ну если ошибка присутствует, значит она есть, прогони отладчиком, это самый верный способ увидеть что там творится

перенёс проект в папку с другим именем и файл индикатора переименовал, работает без ошибок

видно в понедельник я родился :О)

 
Anatoli Kazharski:

 

 

В последних билдах мы добавили в компилятор сообщение для тех случаев, когда в потомке происходит перегрузка метода предка:

deprecated behavior, hidden method calling will be disabled in a future MQL compiler version    

Пример

struct SFoo
  {
   static void func(int)
     {
      Print(__FUNCSIG__);
     }
  };
 
struct SBar : SFoo
  {
   static void func(double)
     {
      Print(__FUNCSIG__);
     }     
  };

void OnStart()
  {
   SBar::func(_Digits);       // !!! будет вызвана SFoo::func(int) - она более подходящая
  }

В данном случае в классе-потомке SBar происходит вызов функции func(int) предка SFoo, так как компилятор не нашел его в потомке.  В потомке есть только функция func(double), и компилятор пытается найти функцию с подходящим параметром в дереве наследования.

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

Строго говоря, переопределение немного более широкое понятие, вы можете сами поискать в интернете разницу между перегрузкой и переопределением

 
MetaQuotes Software Corp.:

ничего непонятно, но очень интересно! компилятор ругается на несколько функций, вот одна из них, в каком месте ему не нравится?

//+------------------------------------------------------------------+
//| Доступность элемента                                             |
//+------------------------------------------------------------------+
void CElement::IsAvailable(const bool state)
  {
//--- Выйти, если уже установлено
   if(state==CElementBase::IsAvailable())
      return;
//--- Установить
   CElementBase::IsAvailable(state);
//--- Остальные элементы
   int elements_total=ElementsTotal();
   for(int i=0; i<elements_total; i++)
      m_elements[i].IsAvailable(state);
//--- Установить приоритеты на нажатие левой кнопкой мыши
   if(state)
      SetZorders();
   else
      ResetZorders();
  }
 
Pavel Kolchin:

ничего непонятно, но очень интересно! компилятор ругается на несколько функций, вот одна из них, в каком месте ему не нравится?

Потому что есть еще и

bool              IsAvailable(void)                         const { return(m_is_available);               }


Пробовал менять на

   virtual void      SetAvailable(const bool state)                  { m_is_available=state;                 }
   bool              IsAvailable(void)                         const { return(m_is_available);               }

все норм )

И такое же нужно будет с остальными провернуть )

 
Oleksii Chepurnyi:

попробовал изменить в файле ElementBase.mqh, ругается еще сильнее

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