Скачать MetaTrader 5

Хранение ссылки или указателя на массив внутри класса.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы к автору программы - задай их в разделе Обсуждение
George Merts
3593
George Merts 2012.10.26 14:43 

Друзья !

Помогите, туплю совершенно.

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

При объявлении класса среди protected членов собирался объявить переменную-указатель:

 double* m_dHigh[]; // указатель на массив

или переменную-ссылку:

double& m_dLow[]; // ссылка на массив

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

Однако, компилятор мне говорит, нельзя использовать ни указателя, ни ссылки.

Что же, внутри класса хранить всю таймсерию, и на каждом тике копировать всю таймсерию внутрь класса для использования ?  

Как решается подобная задача ?  

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
Vladimir Gomonov
8277
Vladimir Gomonov 2012.10.26 14:48  
Laryx:

Друзья !

Помогите, туплю совершенно.

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

При объявлении класса среди protected членов собирался объявить переменную-указатель:

..................

Однако, компилятор мне говорит, нельзя использовать ни указателя, ни ссылки.

....

Как решается подобная задача ? 

Оберни буфер для таймсерии классом.  Указатели на классы в языке разрешены (существуют), правда в виде хендлов (псевдоуказателей) но принцип рабочий.

За исключением некоторой тормознутости, в связи с неявной обработкой хендл-прослойки, особых недостатков в таком доступе нет.

Что же, внутри класса хранить всю таймсерию, и на каждом тике копировать всю таймсерию внутрь класса для использования ?  

Не надо копировать всю таймсерию.  Только свежие данные.
o_o
Модератор
23688
o_o 2012.10.26 14:49  
Laryx:

Как решается подобная задача ?  

уточните пожалуйста

вам нужен массив указателей или указатель на массив?

если указатель на массив - то объявление

double *arr[] - это не указатель на массив, а массив указателей

Если нужен указатель на массив - то оберните массив в класс и используйте указатель на его объект

class CC
{
   double arr[]
};

CC *obj;


George Merts
3593
George Merts 2012.10.26 14:54  
MetaDriver:

Оберни таймсерию классом.  Указатели на классы в языке разрешены (существуют), правда в виде хендлов (псевдоуказателей) но принцип рабочий.

За исключением некоторой тормознутости, в связи с неявной обработкой хендл-прослойки, особых недостатков в таком доступе нет. 

Да, это реализуется через классы Стандартной Библиотеки CiHigh (и другие подобные).

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

sergeev:

уточните пожалуйста

вам нужен массив указателей или указатель на массив?

Да, я вижу там двусмысленность. Мне нужен именно один указатель на массив-таймсерию (значения цен, переданные в индикатор). Я пытался сделать  вот так:

double(*m_dHigh)[]; // указатель на массив

Пишет ошибку. 

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
George Merts
3593
George Merts 2012.10.26 14:55  
sergeev:
 

Если нужен указатель на массив - то оберните массив в класс и используйте указатель на его объект

class CC
{
   double arr[]
};

CC *obj;

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

Спасибо за консультацию. 

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий