删除对象的 Mql4 未声明标识符
Mql4 undeclared identifier for delete object
我在这里使用示例中的代码
我在
中添加代码时收到 listOfTrades - undeclared identifier
错误
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
delete(listOfTrades);
}
我有一种感觉,因为 listOfTrades
是在 OnInit()
中声明的,而不是在全局之外声明的,但不确定这会如何影响它。
Main.mql
#include <CTrade.mqh>
int OnInit()
{
CArrayObj *listOfTrades=new CArrayObj;
}
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
delete(listOfTrades);
}
是的,您必须在调用 OnInit()
之前全局声明它。在提到的问题中错过了这一点,将更新。
如果你以某种方式通过指针传递对象 void OnTick(){ doSomeFunction(listOfTrades); }
那么你应该确保没有使用相同的变量名(至少在同一个文件中),否则你会收到警告说有一天可能会变成漏洞。
void doSomeFunction(CArrayObj* _listOfTrades)// not "listOfTrades" !!!
{
for(int i=_listOfTrades.Total()-1;i>=0;i--)
{
CTrade* trade=_listOfTrades.At(i);
// action with CTrade object
}
}
我在这里使用示例中的代码
我在
中添加代码时收到listOfTrades - undeclared identifier
错误
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
delete(listOfTrades);
}
我有一种感觉,因为 listOfTrades
是在 OnInit()
中声明的,而不是在全局之外声明的,但不确定这会如何影响它。
Main.mql
#include <CTrade.mqh>
int OnInit()
{
CArrayObj *listOfTrades=new CArrayObj;
}
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
delete(listOfTrades);
}
是的,您必须在调用 OnInit()
之前全局声明它。在提到的问题中错过了这一点,将更新。
如果你以某种方式通过指针传递对象 void OnTick(){ doSomeFunction(listOfTrades); }
那么你应该确保没有使用相同的变量名(至少在同一个文件中),否则你会收到警告说有一天可能会变成漏洞。
void doSomeFunction(CArrayObj* _listOfTrades)// not "listOfTrades" !!!
{
for(int i=_listOfTrades.Total()-1;i>=0;i--)
{
CTrade* trade=_listOfTrades.At(i);
// action with CTrade object
}
}