【发布时间】:2018-10-18 19:38:37
【问题描述】:
我正在使用链接列表,特别是我正在尝试附加一个对象。 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;
}
【问题讨论】:
-
您不能将
const T *分配给T *。允许它允许您修改const对象。如果const int * x指向const int i,那么如果你用int * y = x;为指针分配了一个非常量指针,那么你可以使用y来尝试修改i。 -
“我想既然它们都是 T* 类型,我可以将一个分配给另一个。”它们都不是
T*类型。一个是T const *类型。 -
@Swordfish 好吧,我原本以为它们都是一样的,但是你不能修改 const T* 的内容。
-
this->first = &currentNode;是一个错误,你存储了一个立即销毁的局部变量的地址
标签: c++ templates pointers linked-list type-conversion