为什么我收到"从常量指针到指针的转换无效?
Why am I getting "invalid conversion from const pointer to pointer?
我正在使用链表,特别是我正在尝试附加一个对象。 追加函数将向我传递一个指向我要添加的对象的指针。
然后,此指针用于 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 = ¤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
构造函数采用一个const T* item
,这是一个指向常量 T 的指针。OULink.data
可以存储一个T*
,这是一个指向非常量T的指针。
你不能为T*
分配const T*
,因为const
是一个合约,上面写着"我不会让我指向的对象改变"。 如果你可以分配给一个T*
,该指针将允许修改对象,这将破坏该契约。
您可能希望将构造函数OULink(const T* item);
更改为OULink(T* item);
。
相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针