c++ - 为什么我会收到“从 const 指针到指针的无效转换?
问题描述
我正在使用链接列表,特别是我正在尝试附加一个对象。append 函数传递了一个指向我要添加的对象的指针。
然后在初始化 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;
}
解决方案
构造OULink
函数接受 a const T* item
,它是一个指向 const T 的指针。 OULink.data
可以存储 a T*
,它是一个指向非 const T 的指针。
您不能将 a 分配const T*
给 a T*
,因为const
a 是一个合同,上面写着“我不会让我指向的对象发生变化”。如果您可以分配给 a T*
,则该指针将允许修改对象,这将破坏该合同。
您可能希望将构造函数更改OULink(const T* item);
为OULink(T* item);
.
推荐阅读
- python - Twilio twiml 指令未在 Flask.redirect 中执行
- java - Java 中如何推断泛型类型?
- ruby-on-rails - 避免显式重新加载关联
- ruby-on-rails - Rails 向 JSON 序列化器添加属性
- python - Selenium Python - 获取网络响应正文
- python - 如何从 python 中的时间戳中消除熊猫系列中元素的时区意识?
- asp.net-core - .Net Core 5.0 迁移的 SignalR 问题,app.UseSignalR -> app.UseEndpoints
- css - 角度材料水平步进间距
- django - 在 Django 中设置主键
- c++ - 在程序中创建文件,映射文件,并使用 memcpy ......所有权限都打开,但错误代码是“权限被拒绝”?