C++ 状态错误C2440:“ '=';:无法从';常数FDHNode<;项目类型>*';至';FDHNode<;项目类型>*'&引用;?
我一直收到错误“C2440:”=':无法从“const FDHNode*”转换为“FDHNode*”,我一辈子也无法解决它。这是我的代码和定义函数,问题显然来自于此C++ 状态错误C2440:“ '=';:无法从';常数FDHNode<;项目类型>*';至';FDHNode<;项目类型>*'&引用;?,c++,C++,我一直收到错误“C2440:”=':无法从“const FDHNode*”转换为“FDHNode*”,我一辈子也无法解决它。这是我的代码和定义函数,问题显然来自于此 template<class ItemType> class FDHNode { private: ItemType coeff; //Data item representing coefficient ItemType expon; //Data item representing exponen
template<class ItemType>
class FDHNode
{
private:
ItemType coeff; //Data item representing coefficient
ItemType expon; //Data item representing exponent
FDHNode<ItemType>* next; //Pointer to a next node
public:
FDHNode();
FDHNode(const ItemType& coeffi, const ItemType& expone);
FDHNode(const ItemType& coeffi, FDHNode<ItemType>* nextNodePtr);
void setCoeffi(const ItemType& aCoeffi);
void setExpon(const ItemType& anExpon);
void setNext(const FDHNode<ItemType>* NEXTPTR);
ItemType getCoeffi();
ItemType getExpon();
FDHNode<ItemType>* getNext();
void print();
};
template<class ItemType>
void FDHNode<ItemType>::setNext(const FDHNode<ItemType>* NEXTPTR)
{
next = NEXTPTR;
}
模板
类FDHNode
{
私人:
ItemType coeff;//表示系数的数据项
ItemType expon;//表示指数的数据项
FDHNode*next;//指向下一个节点的指针
公众:
FDHNode();
FDHNode(const ItemType&coeffi、const ItemType&expone);
FDHNode(const ItemType&coeffi,FDHNode*nextNodePtr);
void setCoeffi(const ItemType&aCoeffi);
void setExpon(const ItemType&anExpon);
void setNext(常数FDHNode*NEXTPTR);
ItemType getCoeffi();
ItemType getExpon();
FDHNode*getNext();
作废打印();
};
模板
void FDHNode::setNext(常量FDHNode*NEXTPTR)
{
next=NEXTPTR;
}
变量next
的定义如下:
FDHNode<ItemType>* next; //Pointer to a next node
const FDHNode<ItemType>* NEXTPTR
添加的const
有其意义,说明它不能修改。当您将NEXTPTR
分配给next
时,它会成为一个问题,因为next
可以修改,但NEXTPTR
是一个常量
根据某些情况,有两种方法可以解决这一问题:
next
指针实际上是可以更改的,则必须修改NEXTPTR
的定义,使其不是const
。如果这样做,您的函数声明将如下所示:void FDHNode::setNext(FDHNode*NEXTPTR)
next
变量也定义为const
。例如:const FDHNode*next;
注意:有一个
const\u cast
可以去掉变量的const
。但是如果您不知道这个问题的答案,您不太可能需要在这里进行该cast,因为在这种情况下,它可能弊大于利。变量下一个定义如下:
FDHNode<ItemType>* next; //Pointer to a next node
const FDHNode<ItemType>* NEXTPTR
添加的const
有其意义,说明它不能修改。当您将NEXTPTR
分配给next
时,它会成为一个问题,因为next
可以修改,但NEXTPTR
是一个常量
根据某些情况,有两种方法可以解决这一问题:
如果next
指针实际上是可以更改的,则必须修改NEXTPTR
的定义,使其不是const
。如果这样做,您的函数声明将如下所示:void FDHNode::setNext(FDHNode*NEXTPTR)
或者参数实际上是一个常量,在这种情况下,您应该将next
变量也定义为const
。例如:const FDHNode*next;
注意:这里有一个可以去掉变量的常量的const\u cast
。但是如果你不知道这个问题的答案,你不太可能需要这个cast,因为在这种情况下它可能弊大于利。错误中说得很清楚,NEXTPTR
是const FDHNode*
whilenext
是FDHNode*
,您不能将const FDHNode*
分配给FDHNode*
您可以使用const\u cast
使其成为非const
,例如:
FDHNode<ItemType>* non_const_next = const_cast<FDHNode<ItemType>*>(NEXTPTR);
FDHNode*non_const_next=const_cast(NEXTPTR);
最好的方法是更改setNext()
的参数,将其更改为FDHNode*NEXTPTR错误很明显,NEXTPTR
是const FDHNode*
而next
是FDHNode*
,您不能将const FDHNode*
分配给FDHNode*
您可以使用const\u cast
使其成为非const
,例如:
FDHNode<ItemType>* non_const_next = const_cast<FDHNode<ItemType>*>(NEXTPTR);
FDHNode*non_const_next=const_cast(NEXTPTR);
最好的方法是更改setNext()的参数
,将其更改为FDHNode*NEXTPTR
您有一个常量指针,并希望将其分配给一个非常量指针。这不起作用,因为它允许您以后修改常量。您建议我如何解决此问题?我正在尝试为一个节点类定义一个函数,以便它指向下一个节点。@bopersson您有一个常量指针吗I’我想将其分配给一个非常量指针。这不起作用,因为它允许您以后修改常量。您建议我如何解决这个问题?我正在尝试为一个节点类定义一个函数,以便它指向下一个节点。@Bopersson非常感谢!您的第一个建议解决方案是使它不是常量,效果很好。@Francishroux我很高兴它奏效了,我更重要的是希望你理解这个问题。我做到了,当你指出它时,很明显我在自相矛盾。非常感谢!你的第一个建议解决方案是让它不那么完美。@FrancisHeroux我很高兴它奏效了,我更重要的是希望你理解这个问题m、 是的,很明显,一旦你指出,我是在自相矛盾。