Скачать MetaTrader 5

динамический массив объектов пользовательского класса mql5. как быть?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не поставляешь сигналы и не продаешь приложения? Не проблема, заработать могут все!
shvartz412
60
shvartz412 2012.08.14 09:13 

есть у меня класс со своими данными и внутренними функциями. нужно сделать массив с экземплярами такого класса. пытался объявить так:

C_Own  array_Own[];   - в этом случае не получается пробежаться по всему массиву от 0 до Total(). вообще он функцию тотал не признает. а я не знаю сколько элементов в моем массиве... они ведь то добавляются, то удаляются

а если прописать массив как CArrayObj то добавлять элементы в массив у меня получается, а вот запускать внутреннюю функцию элемента или считать значение внутренней переменной - нет. (пытался с помощью функции At(i))

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

как это сделать? помогите пожалуйста 

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
Vladimir Kazakov
5693
Vladimir Kazakov 2012.08.14 09:43  

Наверно надо создавать массив указателей на объекты, а не самих объектов.

 

Stanislav Korotky
17866
Stanislav Korotky 2012.08.14 09:43  
Покажите, как Вы свой класс описали. Унаследуйте от CObject и используйте CArrayObj. Что за ошибки выдает? Может у вас все переменные private?
shvartz412
60
shvartz412 2012.08.14 10:09  
kazakov.v:

Наверно надо создавать массив указателей на объекты, а не самих объектов.

 

с указателями не сталкивался. в чем разница? это может стать решением проблемы?

marketeer:
Покажите, как Вы свой класс описали. Унаследуйте от CObject и используйте CArrayObj. Что за ошибки выдает? Может у вас все переменные private?

 

class Pol1 :public CObject

  {

public:

  // данные для идентификации стратегии

  short PeriodMA1;// периоды скользящих средних

  short PeriodMA2;   // и так далее...

 }

 

в самом советнике объявил: 

 CArrayObj     APol1;

  

APol1.Add(new Pol1(PMA1,PMA2,PMA3,TMA1,TMA2,TMA3,VAO));// такая запись ошибок не вызывает и добавляет элемент

 

а вот как оттуда вытащить элемент?

if ((APol1.At(el).PeriodMA1==TempP1.PeriodMA1)&&  // ошибка 'PeriodMA1' - struct member undefined

 думаю он не знает что текущий элемент имеет такую переменную как PeriodMA1

 

Konstantin Gruzdev
14008
Konstantin Gruzdev 2012.08.14 10:23  
shvartz412:

есть у меня класс со своими данными и внутренними функциями. нужно сделать массив с экземплярами такого класса...

Возможно подойдет вот это. Еще можно организовать как список.
Stanislav Korotky
17866
Stanislav Korotky 2012.08.14 10:36  
shvartz412:

Приведите объект, возвращаемый из At, к классу Pol1.
Vladimir Kazakov
5693
Vladimir Kazakov 2012.08.14 10:36  

Ну, если у Вас объекты на базе CObject, то проще всего будет создать объект CArrayObj - только не массив, а просто один объект: он сам по себе организует динамический массив указателей на объекты, и методы для работы с ними.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
shvartz412
60
shvartz412 2012.08.14 10:43  
Lizar:
Возможно подойдет вот это. Еще можно организовать как список.
ArraySize мне подходит как нельзя лучше. всем огромное спасибо за участие.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий