Преобразование параметров запрещено - MQL5 - CArrayObj

У меня есть следующий объект, объявленный в моей глобальной области:

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);
}

Я получил:

'pUpMovm' - преобразование параметров запрещено

Если я сделаю то же самое в своем методе OnTick(), он сработает.

Любая помощь будет принята с благодарностью.


person user3475602    schedule 07.04.2015    source источник


Ответы (2)


Использование * вместо ссылки. Последняя строка 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) мог изменять указатель локальной переменной UpMovm в OnTick()... но в этом коде это было бы бессмысленно, поскольку измененный указатель не использовался бы.

person 2785528    schedule 07.04.2015
comment
К сожалению, это не работает. Я получаю эту ошибку компилятора: '*' - operand expected. - person user3475602; 08.04.2015
comment
Я почти уверен, что ошибка указывает на правильную строку. Может быть, это особенность MQL5? - person user3475602; 08.04.2015

Я решил проблему следующим образом:

UpwardMovements.Add(GetPointer(pUpMovm));

Вы можете проверить указатель перед этой операцией с помощью CheckPointer(GetPointer(pUpMovm));

person user3475602    schedule 19.04.2015