У меня есть следующий объект, объявленный в моей глобальной области видимости:
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()
метод, это работает.
Любая помощь будет принята с благодарностью.
Использование * против ссылки. Последняя строка 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 () … но в этом коде это было бы бессмысленно, поскольку измененный указатель не использовался бы.
Я решил проблему следующим образом:
UpwardMovements.Add(GetPointer(pUpMovm));
Вы можете проверить указатель перед этой операцией с CheckPointer(GetPointer(pUpMovm));