Нужно вернуть из класса массив или иметь возможность менять массив внутри класса(массив нужен вне класса, то есть на глобальном уровне)

 

Прочитав документацию, где сказано, что при изменении  массива скопированного из переданного по ссылке, переданный массив тоже меняется.

У меня не меняется. Что делаю не так?

class test
  {
private:
   // Переменные для параметров
   double            m_array[];
   int               mperiod;
   int               me;
   double            mPr;
   string            mSymbol_;

public:
   
   void              parametr(double &array[],int aperiod_,int ae,double aPr, string aSymbol_)
     {
      mperiod=aperiod_;
      me=ae;
      mPr=aPr;
      mSymbol_=aSymbol_;
      
      ArraySetAsSeries(m_array,true);
      if(ArraySize(array)>0)
        {
         ArrayResize(m_array,ArraySize(array));
         ArrayCopy(m_array, array);
        }
     }
     

   double            abc()
     {
      m_array[0] = 3333333;
      m_array[1] = 1111111;
      Print("m_array[0]=", m_array[0], "m_array[1]=", m_array[1]);

      return(0);
     }

  };

вызываю в скрипте:

#property copyright ""
#property link      ""
#property version   "1.00"
#include <test.mqh>

test zn;
double         otk[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  ArrayResize(otk,2);
  otk[0]=77777.0;
  otk[1]=10000.0;
//---
   zn.parametr(otk,1,2,4.0,"");
   zn.abc();
   Print("otk[0]=", otk[0], "otk[1]=", otk[1]);
   
   
  }
//+------------------------------------------------------------------+
 
forexman77:

Прочитав документацию, где сказано, что при изменении  массива скопированного из переданного по ссылке, переданный массив тоже меняется.

У меня не меняется. Что делаю не так?

вызываю в скрипте:

А с чего Вы взяли, что m_array указывает на тот же массив, что и array? 
 
Sergey Gridnev #:
А с чего Вы взяли, что m_array указывает на тот же массив, что и array? 
m_array копирует  array. По логике должна копироваться ссылка на массив, а значит при изменении копируемый тоже изменится.
 
forexman77 #:
m_array копирует  array. По логике должна копироваться ссылка на массив, а значит при изменении копируемый тоже изменится.
Нет. Копируются данные. В результате - разные массивы с одинаковыми данными.
 
Sergey Gridnev #:
Нет. Копируются данные. В результате - разные массивы с одинаковыми данными.

А как нужно делать?

 
forexman77 #:
m_array копирует  array. По логике должна копироваться ссылка на массив, а значит при изменении копируемый тоже изменится.
array и  otk это тот же массив.
 
Sergey Genikhov #:
array и  otk это тот же массив.

Да. Класс может вернуть, только одно значение, а мне нужно много. Как в Питоне не получится же сделать вернуть return  с массивом?

 
forexman77 #:

Да. Класс может вернуть, только одно значение, а мне нужно много. Как в Питоне не получится же сделать вернуть return  с массивом?

 я не знаю питона. но судя по тому что я понял, тебе нужно присваивать адрес m_array внешним переменным. 
 
Sergey Genikhov #:
 я не знаю питона. но судя по тому что я понял, тебе нужно присваивать адрес m_array внешним переменным. 

Проще говоря мне необходимо вернуть в советник из класса несколько значений.

 
forexman77 #:

Проще говоря мне необходимо вернуть в советник из класса несколько значений.

Так работайте по ссылке на массив. И изменяйте данные как хотите.

 
forexman77 #:

Проще говоря мне необходимо вернуть в советник из класса несколько значений.

это какой то пиратский метод, но я думаю если создать указатель на обьект вместо double* otk , передать его по ссылке, и внутри функции присвоить ему &m_array , то вы вытащите этот оъект в советник. 
Причина обращения: