我正在使用链表,特别是我试图附加一个对象。 将附加函数传递给我要添加的对象的指针。
此指针随后用于OULink(列表节点)对象的初始化。
在我的OULink类中,我试图将数据指针设置为=我要添加的对象,这就是我得到错误的地方:
错误:从'const NvraRecord *'到'NvraRecord *'的无效转换[-fpermissive] this-> data = item;
我想因为它们都是T *类型,所以我可以将它们分配给另一个。
template <typename T>
class OULinkedList {
template <typename F>
friend class OULinkedListEnumerator;
private:
Comparator<T>* comparator = NULL; // used to determine list order and item equality
unsigned long size = 0; // actual number of items currently in list
OULink<T>* first = NULL; // pointer to first link in list
OULink<T>* last = NULL; // pointer to last link in list
public:
OULinkedList(Comparator<T>* comparator); // creates empty linked list with comparator
virtual ~OULinkedList(); // deletes all links and
template <typename T>
bool OULinkedList<T>::append(const T* item) {
if(this->first == NULL){
OULink<NvraRecord> currentNode(item);
this->first = ¤tNode;
}else{
}
std::cout << *this->first->data << std::endl;
return false;
}
template <typename T>
class OULink {
template <typename F>
friend class OULinkedList;
template <typename F>
friend class OULinkedListEnumerator;
private:
T* data = NULL; // pointer to data item of any type
OULink* next = NULL; // pointer to next link
public:
OULink(const T* item);
virtual ~OULink();
};
template<typename T>
OULink<T>::~OULink(){
}
// Implementation goes here
template<typename T>
OULink<T>::OULink(const T* item){
this->data = item;
}
答案 0 :(得分:1)
OULink
构造函数采用const T* item
,它是指向const T的指针。OULink.data
可以存储T*
,它是指向非const的指针。 T。
您不能将const T*
分配给T*
,因为const
是一个合同,上面写着“我不会让我指向的对象改变”。如果您可以分配给T*
,则该指针将允许修改该对象,这将破坏该合同。
您可能想将构造函数OULink(const T* item);
更改为OULink(T* item);
。