为什么我收到"从常量指针到指针的转换无效?

Why am I getting "invalid conversion from const pointer to pointer?

本文关键字:指针 转换 无效 为什么 常量      更新时间:2023-10-16

我正在使用链表,特别是我正在尝试附加一个对象。 追加函数将向我传递一个指向我要添加的对象的指针。

然后,此指针用于 OULink(列表节点(对象的初始化。

在我的 OULink 类中,我尝试将数据指针设置为 = 我尝试添加的对象,这就是我收到错误的地方:

错误:从"const NvraRecord*"到"NvraRecord*"的转换无效[-允许] 此数据> = 项;

我想既然它们都是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 = &currentNode;
}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;
}

OULink构造函数采用一个const T* item,这是一个指向常量 T 的指针。OULink.data可以存储一个T*,这是一个指向非常量T的指针。

你不能为T*分配const T*,因为const是一个合约,上面写着"我不会让我指向的对象改变"。 如果你可以分配给一个T*,该指针将允许修改对象,这将破坏该契约。

您可能希望将构造函数OULink(const T* item);更改为OULink(T* item);