Я пытаюсь использовать метод Contains() класса шаблона, но получаю странную ошибку преобразования аргументов.Компилятор, похоже, меняет свой параметр const
ошибка C2664: 'BOOL DynamicArray :: Содержит (константный Е) сопзИ' : не может преобразовать аргумент 1 из 'сопзИте Совместных *' к 'Объединенных * сопзИте' с Е = Joint
Конверсия теряет отборочные
Вот соответствующий код класса шаблонов.
template <class E>
class DynamicArray
{
bool Contains (const E element) const;
// Other code...
};
template <class E>
bool DynamicArray<E>::Contains(const E element) const
{
// Other code...
}
призыв к Содержит способ сделать так, здесь
bool ASMState::AnimatesJoint(const Joint* pJoint) const
{
return m_animatedJoints.Contains(pJoint);
}
кода соответствующего класса шаблона в ASMState.h
class ASMState
{
DynamicArray<Joint*> m_animatedJoints;
// Other members...
bool AnimatesJoint(const Joint* pJoint) const;
// Other methods...
};
Если удалить сопзЬ в функции AnimatesJoint подписи например, bool ASMState::AnimatesJoint(Joint* pJoint) const
, тогда код компилируется. Я хотел бы сохранить const, если можно, но я не знаю, почему этот параметр, похоже, изменился с того, что я написал. То есть от const Joint *
до Joint *const
согласно компилятору.
Я использую Visual Studio 2013 Express,
Вопрос не является дубликатом, так как проблема, связанная с ошибкой компилятора, не решена одним из связанных потоков. Это не преобразование 'Joint *' to 'Joint * const', которое приводит к ошибке, но недействительное преобразование' Joint const * 'to' Joint * '. И последняя проблема не отличается от любого другого (не указателя) типа. – davidhigh