Преобразование параметров не допускается — 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() метод, это работает.

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

0

Решение

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

1

Другие решения

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

UpwardMovements.Add(GetPointer(pUpMovm));

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

0

По вопросам рекламы [email protected]