首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为函数参数的MQL4发送对象数组

作为函数参数的MQL4发送对象数组
EN

Stack Overflow用户
提问于 2019-10-06 20:57:14
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
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]);
                }
            }
        }
};

我的错误:

代码语言:javascript
复制
'&' - comma expected
']' - declaration without type
']' - comma expected
'initializeStochastics' - wrong parameters count
'stochastics' - undeclared identifier

我采用这里的语法,但可能是MQL5的解决方案。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-07 10:02:09

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

代码语言:javascript
复制
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();
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58261171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档