簡體   English   中英

為什么我得到“從const指針到指針的無效轉換?”

[英]Why am I getting "invalid conversion from const pointer to pointer?

我正在處理一個鏈表,特別是我試圖附加一個對象。 將附加函數傳遞給我要添加的對象的指針。

然后,此指針用於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;
}

OULink構造函數采用const T* item ,它是指向const T的指針OULink.data可以存儲T* ,它是指向非const T的指針。

您不能將const T*分配給T* ,因為const是一個約定,上面寫着“我不會讓我指向的對象更改”。 如果可以分配給T* ,則該指針將允許修改該對象,這將破壞該合同。

您可能想要更改構造函數OULink(const T* item); OULink(T* item);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM