mql4 - 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 中发送一个类实例数组作为方法参数吗?如果“是”——如何,如果不是——它也会回答。
解决方案
一切正常(几乎正常)只是决定您是要创建一个全局数组还是使用指针访问(完成后需要删除它)。这是指针的示例。另外,请下次提供 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();
}
推荐阅读
- sql-server - 限制 SQL 全文索引
- android - 下载目录中的列表文件仅限于图像
- android - 在 Android Studio 中生成签名 APK 时出现 Gradle 错误
- python - Networkx 中的自动签约节点
- javascript - 种类(); Javascript中的方法
- r - 为什么 `levels<-` 的行为会根据命名参数的顺序而有所不同?
- python - Crontab python 脚本不运行(在 linux 服务器上使用 anaconda)
- java - 组件测试的代码覆盖率未显示在多模块项目中
- java - 如何删除“。” 从正则表达式匹配?
- c - 在结构中初始化数组