不允许参数转换 - MQL5 - CArrayObj

时间:2015-04-07 19:15:47

标签: c++ mql5

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

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' - 不允许参数转换

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我解决了以下问题:

UpwardMovements.Add(GetPointer(pUpMovm));

您可能希望使用CheckPointer(GetPointer(pUpMovm));

检查此操作之前的指针