删除对象的 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
     }
  }