Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器似乎要更改我的常量参数_C++_Templates_Constants - Fatal编程技术网

C++ 编译器似乎要更改我的常量参数

C++ 编译器似乎要更改我的常量参数,c++,templates,constants,C++,Templates,Constants,我试图使用模板类的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;

我试图使用模板类的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...
}
ASMState.h中的相关模板类代码

class ASMState
{
    DynamicArray<Joint*> m_animatedJoints;

    // Other members...

    bool AnimatesJoint(const Joint* pJoint) const;

    // Other methods...
};
类状态
{
DynamicCarray m_动画关节;
//其他成员。。。
bool AnimatesJoint(const Joint*pJoint)const;
//其他方法。。。
};
如果我像这样删除AnimatesJoint函数签名中的常量,
bool ASMState::AnimatesJoint(Joint*pJoint)const
,那么代码将编译。如果可以的话,我想保持常量不变,但我不知道为什么这个参数似乎与我写的有所不同。也就是说,根据编译器,从
const Joint*
Joint*const


我正在使用Visual Studio 2013 Express

似乎
bool Contains(const E element)const
需要类型为
const E
的输入,而在

return m_animatedJoints.Contains(pJoint);
您正在传递类型为
const*
的输入,即指针。也许解决方案是将这一行更改为:

return m_animatedJoints.Contains(*pJoint);

我猜您得到的错误是因为编译器试图将输入
pJoint
as
const E
where
E=…*const
,即常量指针。

似乎
布尔包含(const e元素)const
需要类型为
const e
的输入,而在

return m_animatedJoints.Contains(pJoint);
您正在传递类型为
const*
的输入,即指针。也许解决方案是将这一行更改为:

return m_animatedJoints.Contains(*pJoint);

我猜您得到的错误是因为编译器试图将输入
pJoint
as
const E
where
E=…*常量
,即常量指针。

您的类模板
DynamicArray
将类型
e
推断为
Joint*
,并且在成员函数
包含的
中基本上添加了
const
。现在,正如注释中提到的,并且编译器错误已经指出的,这不会导致
常量Joint*
(与
Joint const*
相同),但是对于
Joint*const
——添加
const
并不对应于文本替换,您只需将
E
替换为指针类型

但是,这里的问题不是将
常量添加到函数
Contains
所采用的指针类型中,因为此强制转换是允许的。问题在于,您将常量指针传递给函数
Contains
,但实际上它需要一个非常量指针——不允许从
常量Joint*
转换为
Joint*

这就是为什么删除
Contains(const E)
中的
const
无法解决此特定问题的原因。尽管如此,我还是强烈建议这样做,因为按常量值获取参数几乎没有任何用处


相反,正如您已经编写的,您需要删除函数
AnimatesJoint(const Joint*pJoint)
中的
const
,您的类模板
dynamiccarray
将类型
E
推断为
Joint*
,并且在成员函数
包含的
中,您基本上向其添加了
const
。现在,正如注释中提到的,并且编译器错误已经指出的,这不会导致
常量Joint*
(与
Joint const*
相同),但是对于
Joint*const
——添加
const
并不对应于文本替换,您只需将
E
替换为指针类型

但是,这里的问题不是将
常量添加到函数
Contains
所采用的指针类型中,因为此强制转换是允许的。问题在于,您将常量指针传递给函数
Contains
,但实际上它需要一个非常量指针——不允许从
常量Joint*
转换为
Joint*

这就是为什么删除
Contains(const E)
中的
const
无法解决此特定问题的原因。尽管如此,我还是强烈建议这样做,因为按常量值获取参数几乎没有任何用处


相反,正如您已经编写的,您需要删除函数
AnimatesJoint(const Joint*pJoint)
中的
const
,您知道类型推断是如何工作的吗?您知道类型推断是如何工作的吗?问题不是重复的,因为导致编译器错误的问题不是由一个链接线程解决的。导致错误的不是
Joint*
Joint*const
的转换,而是无效的
Joint-const*
Joint*
的转换。后一个问题与任何其他(非指针)类型没有区别。这个问题不是重复的,因为导致编译器错误的问题不是由一个链接线程解决的。导致错误的不是
Joint*
Joint*const
的转换,而是无效的
Joint-const*
Joint*
的转换。后一个问题与任何其他(非指针)类型没有区别。