不允许参数转换 - MQL5 - CArrayObj

Parameter conversion not allowed - MQL5 - CArrayObj

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

CArrayObj *UpwardMovements = new CArrayObj;

我想将 CUpwards 个对象添加到 UpwardMovementsCUpwards 继承自 CObject 因此可以将其添加到数组中。但是,我无法在方法中将它添加到数组中。

例如:

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



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

我得到:

'pUpMovm' - parameter conversion not allowed

如果我在我的 OnTick() 方法中做同样的事情,它就会起作用。

如有任何帮助,我们将不胜感激。

使用 * 与参考。 OnTick()最后一行,改为

CalcUpwardMovement(*UpMovm);

因为该方法使用引用。


编辑 - 4/8

奇怪……你的编译器需要另一个括号吗?我只是猜测。我认为它不应该需要另一个括号。

您的代码,以及我建议的修复(参见 "change here" 评论)

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 .​​..但是在这段代码中这将毫无意义,因为不会使用修改后的指针。

我解决问题如下:

UpwardMovements.Add(GetPointer(pUpMovm));

您可能想在执行此操作之前检查指针 CheckPointer(GetPointer(pUpMovm));