我一直收到错误“C2440:”'=':无法从'const FDHNode *'转换为'FDHNode *'而且我不能为我的生活弄明白。这是我的代码和定义函数所在问题显然来自于。
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;
}
答案 0 :(得分:2)
变量next
的定义如下:
FDHNode<ItemType>* next; //Pointer to a next node
变量NEXTPTR
的定义如下:
const FDHNode<ItemType>* NEXTPTR
添加的const
有其重要性,声明无法修改。当您将NEXTPTR
分配给next
时,会出现问题,因为next
可以修改,但NEXTPTR
是常量。
根据某些事情,有两种方法可以解决这个问题:
next
指针实际上可以更改,则必须修改NEXTPTR
的定义,使其不是const
。如果您这样做,您的函数声明将如此:void FDHNode<ItemType>::setNext(FDHNode<ItemType>* NEXTPTR)
next
变量定义为const
。像这样:const FDHNode<ItemType>* next;
注意:有const_cast<>
可能会丢弃变量的const
- ness。但如果你不知道这个问题的答案,那么你不太可能需要这样的演员,因为在这种情况下它可能弊大于利。
答案 1 :(得分:1)
错误说明NEXTPTR
const FDHNode<ItemType>*
为next
而FDHNode<ItemType>*
为const FDHNode<ItemType>*
,您无法将FDHNode<ItemType>*
分配给const_cast
}。
您可以使用non-const
将其设为FDHNode<ItemType>* non_const_next = const_cast<FDHNode<ItemType>*>(NEXTPTR);
,例如:
setNext()
最好的方法是更改FDHNode<ItemType>* NEXTPTR
的参数,将其更改为import itertools
infGenGiven = itertools.count() # This is similar your generator
def func(x):
if x%2==0:
return 1.5
else:
return -1.5
infGenCycle = itertools.imap(func, infGenGiven)
count=0
while count<10:
print infGenCycle.next()
count+=1