Скачать MetaTrader 5

Вопрос об ООП от начинающего.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы по сервису MQL5 Cloud Network? FAQ поможет!
Al_key
206
Al_key 2013.08.15 12:54 

Начал осваивать объектную модль мкуэл.

//include
#include <Arrays/ArrayDouble.mqh>
//------------------------------------------------------------------------------------------------------------Класс для построения пользовательских времнных рядов.
//+------------------------------------------------------------------+
//|  класс для работы с данными                                      |
//+------------------------------------------------------------------+
class CCustomData
  {
private:
   int               iIdArray[];               // базовый массиив ID для каждого временного ряда.
   datetime          dTimeDate[];              // базовый массив для хранения даты/времени.
   string            sColNames[];              // Имена "столбцов" данных.
   CArrayDouble      dDataArrays[];            // массив массивов собственно тут и будут храниться временные ряды. Пока тип double, при необходимости можно и другие подключить.
   bool              bOnlyDateNoTime;          // Выбор между форматом описания времени: "дата/время" или просто "дата"
   int               iArraysAmount;
  
public:
   //--- конструктор по умолчанию
                     CCustomData(void);
   //--- конструктор с параметрами
                     CCustomData(int h,int m,int s);

   int g_a_p_h_o_d(string col_name); //get_internal_Array_Pointer/Handle_of_double - ф-я возвращает указатель на выбранный массив данных по имени столбца.
   int create_new_array(string name, string type); //Создает новый пустой динамический массив данных
  };
  
int CCustomData::create_new_array(string name,string type)
{
   ArrayResize(dDataArrays, iArraysAmount + 1, 0);
   dDataArrays[iArraysAmount] = new CArrayDouble;
   return(1);
}
//------------------------------------------------------------------------------------------------------------Класс для построения комплесных временных рядов.
//+------------------------------------------------------------------+
//|  класс для работы с комплексными данными                         |
//+------------------------------------------------------------------+
class CComplexData
   {
private:
   int               iIdArray[];               // базовый массиив ID для каждого временного ряда.
   datetime          dTimeDate[];              // базовый массив для хранения даты/времени.
   CCustomData       CustomData[];             // Массив состоящий из Динамических пользовательских данных, над которыми уже будут проводиться процедуры.
public:
   //--- конструктор по умолчанию
                     CComplexData(void);   
   };

Данный код при компиляции выдает ошибку:

Точнее вот этот блок

int CCustomData::create_new_array(string name,string type)
{
   ArrayResize(dDataArrays, iArraysAmount + 1, 0);
   dDataArrays[iArraysAmount] = new CArrayDouble;
   return(1);
}

Дает ошибку 

'=' - object required
Victor Kirillin
491
Victor Kirillin 2013.08.15 13:10  
Al_key:

Начал осваивать объектную модль мкуэл.

Данный код при компиляции выдает ошибку:

Точнее вот этот блок

Дает ошибку 

так д.б. нормально:
   CArrayDouble      *dDataArrays[];            // массив массивов собственно тут и будут храниться временные ряды. Пока тип double, при необходимости можно и другие подключить.
Dennis Kirichenko
11317
Dennis Kirichenko 2013.08.15 13:12  
Al_key:

Начал осваивать объектную модль мкуэл.

Данный код при компиляции выдает ошибку:

Точнее вот этот блок

Дает ошибку 

Ну и пральна даёт... а шо Вы от него хотели?

Попробуйте так:

private:
   int               iIdArray[];               // базовый массиив ID для каждого временного ряда.
   datetime          dTimeDate[];              // базовый массив для хранения даты/времени.
   string            sColNames[];              // Имена "столбцов" данных.
   CArrayDouble      *dDataArrays[];              // массив  указателей
   bool              bOnlyDateNoTime;          // Выбор между форматом описания времени: "дата/время" или просто "дата"
   int               iArraysAmount;

И лучше имя переменной, если она указатель, как-то обозначать.

Например:

CArrayDouble      *ptr_arr_DataArrays[]; // массив указателей
CArrayDouble      *ptr_DataArrays;       // указатель

Тогда в своём коде Вы быстро, руководствуясь именем переменной/массива, определите что к чему...

Victor Kirillin
491
Victor Kirillin 2013.08.15 13:14  

У Вас объявлен массив объектов класса, а нужно объявить массив указателей. Тогда можно присваивать результат выполнения new.

Либо оставьте объявление массива объектов и не используйте new (при ресайзе массива объекты класса создаются автоматически).

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
Al_key
206
Al_key 2013.08.15 14:26  
uncleVic:

У Вас объявлен массив объектов класса, а нужно объявить массив указателей. Тогда можно присваивать результат выполнения new.

Либо оставьте объявление массива объектов и не используйте new (при ресайзе массива объекты класса создаются автоматически).

Спасибо всем! Читал где-то про этот нюанс, а сейчас что-то из головы вылетело.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий