Описание класса, функцияб тип указатель на массив

 

Всем привет! Решил накидать пару строк.. ошибка компилятора, не могу найти как правильно сделать:

class Strategy
  {
private:
   Fractal           *fractalUp[];
   Fractal           *fractalDn[];

public:
   Fractal           *getCollection(int mode)
     {
      switch(mode)
        {
         case MODE_UPPER:
            return this.fractalUp;
         case MODE_LOWER:
            return this.fractalDn;

        }
        return NULL;
     };
  };

'fractalUp' - invalid array access Strategy.mqh

'fractalDn' - invalid array access Strategy.mqh



 

у Вас 

Fractal           *fractalUp[];

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

значит у тут Вы должны обращаться как к элементу массива:

return this.fractalUp[i];
 
Igor Makanu:

у Вас 

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

значит у тут Вы должны обращаться как к элементу массива:

Всё правильно, как массив, я и хочу вернуть указатель на него, если я корректно выразился относительно массива указателей? указатель на массив?


Упростим пример:

   TestClass *mass[]; 
   TestClass *copy = mass;

// 'mass' - invalid array access


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

 
Matvey Alekseev:

Всё правильно, как массив, я и хочу вернуть указатель на него, если я корректно выразился относительно массива указателей? указатель на массив?

не получится, в MQL указатели не так работают, в С++ получилось бы

у Вас код не воспроизводимый, зависит от того, что за тип у Вас Fractal

если структура, то можно обернуть массив структур в еще структуру и возвращать в качестве результата

примерно так:

//+------------------------------------------------------------------+
struct ARR
{
   double value;
};
//+------------------------------------------------------------------+
struct Fractal
{
   ARR arr[];
};
//+------------------------------------------------------------------+
class Strategy
{
private:
   Fractal           fractalUp;
   Fractal           fractalDn;

public:
   Fractal           getCollection(int mode)
   {
      switch(mode)
      {
      case MODE_UPPER:
         return(fractalUp);
      case MODE_LOWER:
         return(fractalDn);
      }
      return fractalUp;
   };
};

если Fractal это класс, тогда можно указатель вернуть на один элемент, весь массив не получится

если все таки хотите массив указателей, тогда, в принципе, мой пример - оберните в структуру массив указателей на класс и возвращайте в качестве результата, должно работать

 
Igor Makanu:

не получится, в MQL указатели не так работают, в С++ получилось бы

у Вас код не воспроизводимый, зависит от того, что за тип у Вас Fractal

если структура, то можно обернуть массив структур в еще структуру и возвращать в качестве результата

примерно так:

если Fractal это класс, тогда можно указатель вернуть на один элемент, весь массив не получится

если все таки хотите массив указателей, тогда, в принципе, мой пример - оберните в структуру массив указателей на класс и возвращайте в качестве результата, должно работать

покурил.. осознал... да! получается массив указателей... чтобы создать указатель на него надо видимо заворачивать в объект, например создать ещё один класс `FractalCollection`... ну вроде звучит норм, буду пробовать, спасибо!

ps: Fractal - класс для удобства

class Fractal
  {
      public:
         Bar bar;
       
         Fractal(int shift=0)
         {
            this.bar = new Bar(shift);
         };
  };

pps: Да! Всё пучком! Приводить свою портянку в качестве примера не буду... спасибо ещё раз! =)
Причина обращения: