【发布时间】:2016-10-20 20:37:37
【问题描述】:
我正在尝试使用我的模板类的 Contains() 方法,但我得到一个奇怪的参数转换错误。
错误 C2664:'bool DynamicArray::Contains(const E) const' : 无法将参数 1 从 'const Joint *' 转换为 'Joint *const' E=联合
转换失去限定符
这里是相关的模板类代码。
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...
}
对 Contains 方法的调用在此处完成
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 函数签名中的 const,bool ASMState::AnimatesJoint(Joint* pJoint) const,那么代码就会编译。如果可以的话,我想将 const 保留在那里,但我不知道为什么该参数似乎与我所写的有所不同。也就是说,根据编译器,从const Joint * 到Joint *const。
我正在使用 Visual Studio 2013 Express
【问题讨论】:
-
这个问题不是重复的,因为导致编译器错误的问题没有被链接的线程之一解决。导致错误的不是
Joint *到Joint * const的转换,而是无效的Joint const *到Joint *的转换。后一个问题与任何其他(非指针)类型没有什么不同。