首页 > 解决方案 > 为什么我会收到“从 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 = &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;
}

标签: c++templatespointerslinked-listtype-conversion

解决方案


构造OULink函数接受 a const T* item,它是一个指向 const T 的指针。 OULink.data可以存储 a T*,它是一个指向非 const T 的指针。

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

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


推荐阅读