首页 > 解决方案 > MQL4 发送对象数组作为函数参数

问题描述

我将该函数作为类成员,并将我的自定义对象数组作为参数:

class Stochastic { ... some class which sent into initializeStochastics method as param };

class StochasticInitializer {
    public:
        Properties *properties[8];

    public:
        StochasticInitializer(void) {
           this.properties = ... 
        }

    public:
        void initializeStochastics(Stochastic& *stochastics[]) { // This param is my problem
            for (int i = 0 ;i < ArraySize(properties); i++) {
                if (properties[i].enabled) {
                    stochastics[i] = new Stochastic(properties[i]);
                }
            }
        }
};

我的错误:

'&' - comma expected
']' - declaration without type
']' - comma expected
'initializeStochastics' - wrong parameters count
'stochastics' - undeclared identifier

我从这里获取语法,但也许它是 MQL5 的解决方案。

我可以在 MQL4 中发送一个类实例数组作为方法参数吗?如果“是”——如何,如果不是——它也会回答。

标签: mql4

解决方案


一切正常(几乎正常)只是决定您是要创建一个全局数组还是使用指针访问(完成后需要删除它)。这是指针的示例。另外,请下次提供 MCVE,因为有人需要编写所有无用的东西,例如 properties&stoch 类以使其可测试。

class Properties
  {
public:
   bool  enabled;
   int   periodK;
   Properties(bool _enabled,int k):enabled(_enabled),periodK(k){}
  ~Properties(){}
  };
class Stochastic
  {
public:
   int   periodK;

   Stochastic(){}
  ~Stochastic(){}
   Stochastic(Properties *prop):periodK(prop.periodK){}

   double get(const int shift,const int buffer=0)const{return iStochastic(_Symbol,0,periodK,3,3,MODE_SMA,STO_LOWHIGH,buffer,shift);}
  };
class StochasticInitializer
  {
public:
   Properties *properties[8];

   StochasticInitializer()
     {
      Deinit();
      properties[0]=new Properties(true,5);
      properties[1]=new Properties(true,13);
      properties[2]=new Properties(true,14);
      properties[3]=new Properties(true,15);
      properties[4]=new Properties(true,16);
      properties[5]=new Properties(true,17);
      properties[6]=new Properties(true,18);
      properties[7]=new Properties(false,19);
     }
  ~StochasticInitializer(){Deinit();}
   void        Deinit(const int reason=0){   for(int i=0;i<ArraySize(properties);i++)delete(properties[i]);   }
   void        initializeStochastics(Stochastic *&stochastics[])// THIS IS WHAT YOU NEED IN CASE OF POINTERS
     {
      for(int i=0;i<ArraySize(properties);i++)
        {
         if(properties[i].enabled)
           {
            stochastics[i]=new Stochastic(properties[i]);
           }
        }
     }
  };
StochasticInitializer initializer;
void OnTick()
    {
       Stochastic *array[8];    //THIS IS ARRAY OF POINTERS
       initializer.initializeStochastics(array);
       for(int i=0;i<ArraySize(array);i++)
         {
          printf("%i %s: %d %s",__LINE__,__FILE__,i,CheckPointer(array[i])==POINTER_INVALID ? "null" : (string)array[i].periodK);
         }
       for(int i=ArraySize(array)-1;i>=0;i--)delete(array[i]);//DELETING POINTERS
       ExpertRemove();
    }

推荐阅读