Ошибки, баги, вопросы - страница 1060

 
MetaDriver:
2013.09.07 02:39:36    iTester-SL (GBPUSD,M1)    1 object of type CTestStat left
2013.09.07 02:39:36    iTester-SL (GBPUSD,M1)    1 undeleted objects left

Утечка памяти.  //  или глюк компоновщика.

Объект был объявлен как статическая глобальная переменная. (!)  Т.е. вообще не динамический. 

Проблема появилась после выноса части кода, использующего данную переменную, в .mqh файл и объявления её в этом файле как extern (до этого никакой утечки не было):

Программа при этом нормально работает.

// Для себя проблему обошёл объявив объект динамическим. Теперь создаю в OnInit(), в OnDeinit() удаляю.  Утечка (сообщения об утечке) прекратилась.

Спасибо, проверим.
 

Кто-нибудь знает, что это за торговый инструмент такой PROFIT.

 

 
MetaDriver:

Большая просьба к присутствующим на форуме, простестировать  OnCalculate()  на  дублирование вызовов и обнуление prev_calculated на каждом тике.

И выложить свои результаты здесь (есть/нет дублирование).

Тестирующий индикатор здесь.

Кажется удалось разобраться с дублированием тиков.  Помог  Pavel Tsatsenko (kPVT)  // Большое спасибо!

Выяснилось, что сия беда происходит при запросах копирования ( CopyXXX(...) ) за пределами диапазона копируемого буфера. В частности в предложенном для тестирования индикаторе есть неточность, приводящая к запросу более rates_total баров. 

В прицепе поправленная версия.  У меня в терминале работает без дублирования тиков при всех установках терминала. Заинтересованные в теме товарисчи могут проверить. Если у кого-то будут дублирования тиков просьба просигналить.

Файлы:
 
paladin800:

Кто-нибудь знает, что это за торговый инструмент такой PROFIT.

 

скорее всего это сделки которые не попали ни в один символ, может быть пополнение счета. 
 

Наследственность классов забагована. Я уже 3 день не могу закончить класс, потому что баги компиляции лезут!

Вот первый баг:

class CAbstract
{
protected:
   int m_handle;

public:
   CAbstract() : m_handle(INVALID_HANDLE) {}
   int GetHandle() const {return(m_handle);}
};

class CMyObj : CAbstract
{
};

class CHandle : CAbstract
{
protected:
   CMyObj *m_objects[];

public:
   ~CHandle()
   {
      int x;
      // Error: 'CAbstract::GetHandle' - cannot call private member function
      for (x = ArraySize(m_objects)-1; x>-1;x--) Print(m_objects[x].GetHandle());
      
      Print(m_handle);
   }
};


А вот второй:

class CAbstract
{
protected:
   int m_handle;

public:
   CAbstract() : m_handle(INVALID_HANDLE) {}
   int GetHandle() const {return(m_handle);}
};

class CMyObj : CAbstract
{
};

class CHandle : CMyObj
{
public:
   void Log()
   {
      // Error: 'm_handle' - private member access error
      Print(m_handle);
   }
};

Ну, нет тут private members!

Номер в багрепорта - #835727

 
Roffild:

Наследственность классов забагована. Я уже 3 день не могу закончить класс, потому что баги компиляции лезут!

Вот первый баг:


А вот второй:

Ну, нет тут private members!

Номер в багрепорта - #835727

Есть, однако.   Попробуй так:

class CAbstract
{
protected:
   int m_handle;

public:
   CAbstract() : m_handle(INVALID_HANDLE) {}
   int GetHandle() const {return(m_handle);}
};

class CMyObj : public CAbstract   // Наследование по умолчанию приватное. И в С++ и в mql
{
};

class CHandle : CAbstract
{
protected:
   CMyObj *m_objects[];

public:
   ~CHandle()
   {
      int x;
      // Error: 'CAbstract::GetHandle' - cannot call private member function
      for (x = ArraySize(m_objects)-1; x>-1;x--) Print(m_objects[x].GetHandle());
      
      Print(m_handle);
   }
};
Приватное наследование делает все члены наследуемого класса приватными. 
 
MetaDriver:
 // Наследование по умолчанию приватное. И в С++ и в mql

Из справки по MQL5:

class CDerived: public CBaseClass // public наследование можно не указывать, оно по умолчанию
  {
 
Roffild:

Из справки по MQL5:

Кто живёт по книжке - тот умрёт от опечатки.

 
// Наследование по умолчанию приватное. И в С++ и в mql
public наследование можно не указывать, оно по умолчанию
Это плохо, если уж взялись копировать  С++ то надо бы копировать точно, а так вводите многоуважаемых программистов в заблуждения. Ведь класс этим лишь и отличается от структуры - наследованием по умолчанию
 
Eufemio:

Это плохо, если уж взялись копировать  С++ то надо бы копировать точно, а так вводите многоуважаемых программистов в заблуждения.

Ошибка именно в хелпе.    Видимо осталась с незапамятных времён, когда решение двигаться в сторону С++ ещё не стало "политикой партии".

Сейчас наследование по умолчанию приватное, как C++.

Ведь класс этим лишь и отличается от структуры - наследованием по умолчанию


Ну это не совсем так.  Я, например, ещё три отличия сходу могу назвать.