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

时间:2018-10-18 19:38:37

标签: c++ templates pointers linked-list type-conversion

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

此指针随后用于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 = &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;
}

1 个答案:

答案 0 :(得分:1)

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

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

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