Как передать структуру из одного объекта в другой

 
Здравствуйте уважаемые профессионалы MQL. У меня вопрос: Есть 2 объекта Extr(); - рисует экстремумы и хранит их в структуре (public: ... Ext[]);      sup() - должен выбрать экстремумы из структуры и работать с ними. Как сделать так, чтобы sup мог обращатся к структуре Ext[], оба класса должны находится в отдельных include?
 

А в чем проблема-то ?

У меня КАЖДЫЙ класс описывается двумя файлами - .mqh и .mq5 - все в порядке.

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

Лично я предпочитаю вобще не структуры, а классы, и возвращать указатель.

 

Без разницы, в одном файле или в отдельных. Если в разных, то к файлу класса использующего структур подключить файл структуры.

Хотя, вопрос не совсем понятен. Может быть имеется ввиду массив структур объявленный на глобальном уровне программы. Тогда объявить массив структур в отдельном файле и подключать его к основному файлу (советнику или индикатору) - что бы в итоге все работало,  и подключить к файлу с классом, что бы класс писать, компилировать для проверки. 

 
Имеется ввиду структура внутри класса "class CExtremums", объект "CExtremums Extr();" задана так: public:
   struct ExtremumsStr
     {
      double         MM_price;  //Цена
      long             MM_date;   //Дата и время
      int               MM_extr;    //Тип экстремума
      int               MM_TF;       //TimeFrame экстремума
                        ExtremumsStr() { MM_price=0.0; MM_date=0; MM_extr=0; MM_TF=0; }
                       ~ExtremumsStr()
        { Print("END"); }
     };

   ExtremumsStr      MM[]; 

Очень важно, чтобы структура  MM[] была внутри объекта Extr(); т.к. советник использует несколько таких объектов для разных TimeFrame, символов и т.д. объект Extr() должен быть универсальным и обеспечить бесперебойный контроль экстремумов при параллельной работе нескольких объектов этого класса в любых условиях обстановки. У каждого объекта своя структура.

Файлы:
Extr.mqh  10 kb
 
Форвард декларация наверное то что вам нужно.
 

Я никак не пойму, в чем проблема.

Есть структура внутри какого-то класса, объявленная, как public. Значит, к ней существует прямой доступ извне. Ну, так и обращаемся к ней напрямую там, где надо !

Обращаемся к структуре одного объекта - получаем эту структуру из него. Обращаемся к той же структуре, но в другом объекте - получаем другие значения полей структуры.

Что не так ?

 
Ekaterina Belova:
Имеется ввиду структура внутри класса "class CExtremums", объект "CExtremums Extr();" задана так: public:
   struct ExtremumsStr
     {
      double         MM_price;  //Цена
      long             MM_date;   //Дата и время
      int               MM_extr;    //Тип экстремума
      int               MM_TF;       //TimeFrame экстремума
                        ExtremumsStr() { MM_price=0.0; MM_date=0; MM_extr=0; MM_TF=0; }
                       ~ExtremumsStr()
        { Print("END"); }
     };

   ExtremumsStr      MM[]; 

Очень важно, чтобы структура  MM[] была внутри объекта Extr(); т.к. советник использует несколько таких объектов для разных TimeFrame, символов и т.д. объект Extr() должен быть универсальным и обеспечить бесперебойный контроль экстремумов при параллельной работе нескольких объектов этого класса в любых условиях обстановки. У каждого объекта своя структура.

Массив ExtremumsStr      MM[];  уже объявлен в секции public, поэтому будет прямо доступен.

Например, создали экземпляр класса:

CExtremums x;

Потом так: 

x.MM[0]...

Его можно оправить в метод или функцию:

f(x.MM);

void f(ExtremumsStr & mm[]){

//обработка mm

}

 
George Merts:

А в чем проблема-то ?

У меня КАЖДЫЙ класс описывается двумя файлами - .mqh и .mq5 - все в порядке.

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

Лично я предпочитаю вобще не структуры, а классы, и возвращать указатель.


Ага, с указателями быстрее будет. Структуры-то полностью копируются.
 
Alexey Volchanskiy:

Ага, с указателями быстрее будет. Структуры-то полностью копируются.

А массив структур? 
 

А с указателями как?

 

Проблема в компиляции. Как создать метод в классе по получению структуры ведь не задана структура  ExtremumsStr      MM[]; . Получается нужно задать другую структуру того же типа во втором классе и передать в нее структуру MM[], но это потребует много ресурсов и замедлит выполнение программы. Что за способ с указателями?

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