gpt4 book ai didi

c++ - 为什么我得到“从 const 指针到指针的无效转换?

转载 作者:行者123 更新时间:2023-11-28 04:31:05 24 4
gpt4 key购买 nike

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

此指针随后用于初始化 OULink(列表节点)对象。

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

错误:从“const NvraRecord*”到“NvraRecord*”的无效转换 [-fpermissive] 这->数据=项目;

我想既然它们都是 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,它是一个指向 const T 的指针。OULink.data 可以存储一个 code>T*,这是一个指向非常量 T 的指针。

您不能将 const T* 分配给 T*,因为 const 是一个契约(Contract),上面写着“我不会让我指着改变的对象。”如果您可以分配给 T*,则该指针将允许修改对象,这会破坏该契约。

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

关于c++ - 为什么我得到“从 const 指针到指针的无效转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52881323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com