我在全局范围内声明了以下对象:

CArrayObj *UpwardMovements = new CArrayObj;

我想将CUpwards对象添加到UpwardMovements中。 CUpwards继承自CObject,因此可以将其添加到数组中。但是,我不能将它添加到方法中的数组。

例如:
void OnTick()
{
   CUpwards *UpMovm = new CUpwards(ColorForUpwards);
   UpwardMovements.Clear();
   CalcUpwardMovement(UpMovm);
}



void CalcUpwardMovement(CUpwards &pUpMovm)
{
  UpwardMovements.Add(pUpMovm);
}

我得到:



如果我在OnTick()方法中执行相同操作,则可以正常工作。

任何帮助将不胜感激。

最佳答案

使用* vs引用。 OnTick()的最后一行,更改为

CalcUpwardMovement(*UpMovm);

因为该方法使用引用。

编辑-4/8

很奇怪...您的编译器是否需要另一个括号?我只是在猜。我认为它不需要另外的括号。

您的代码,以及我建议的修复程序(请参阅“在此处更改”评论)
void OnTick()
{
   CUpwards *UpMovm = new CUpwards(ColorForUpwards);
   UpwardMovements.Clear();
   CalcUpwardMovement( (*UpMovm) );    // change here <<<<<<<<<<<<
}

void CalcUpwardMovement(CUpwards& pUpMovm)
{
  UpwardMovements.Add(pUpMovm);
}

也许您不是要使用该引用(我看到您将其命名为形式参数'pUpMovm',但是引用不是指针。您改变了主意,但又改变了另一个地方吗?

也许您希望UpwardMovements.Add(pUpMovm)能够在OnTick()中修改局部变量指针UpMovm .​​..,但是在此代码中将毫无意义,因为不会使用修改后的指针。

关于c++ - 不允许参数转换-MQL5-CArrayObj,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29499472/

10-11 17:02