簡體   English   中英

重載賦值運算符C ++

[英]Overloading the assignment operator C++

一項家庭作業要求為Heap類重載寄托運算符,該類用於在每個節點上存儲指向隊列的指針,以模擬緊急房間優先級隊列。

到目前為止,這里是我想出的代碼:

    template <typename T>
    Heap<T>& Heap<T>::operator=(const Heap<T> & rhs)
    {
        //check for self-assignment
        if(this != &rhs)
        {
            //delete memory
            for(int i = 0; i < MAX_HEAP; i++)
            {
                //delete queue at position i, set pointer to NULL
                delete items[i];
                items[i] = NULL;
            }//end for
            delete * items;

            //create new memory to hold copy of rhs

                        //error occurs here
            items = new queue<T> *[MAX_HEAP] ;

            for(int i = 0; i < MAX_HEAP; i++)
                items[i] = rhs.items[i];

            //assigns new stuff to this heap
            size = rhs.size;
            nodes = rhs.nodes;

        }//end if
        return *this;
    }//end =

項目在頭文件中這樣聲明:

    queue<T>* items[MAX_HEAP];

並且是標准庫隊列的實例。

我不確定我是否使用正確的語法創建新的隊列指針動態數組。

我收到一條錯誤消息:

    error C2440: '=' : cannot convert from 'std::queue<_Ty> **' to 'std::queue<_Ty> *[50]'

關於可能導致它的原因以及如何解決的任何想法?

您已將items聲明為std::queue<T> *items[50]; 使用std::queue<T> ** items; ,或者更好的是std::vector<std::queue<T>> items;

另外, delete * items; 應該是delete[] items;

編輯-我忘記在std::queue之后添加<T>

new返回指向傳入類型的指針,因此現在不匹配。 我無法確定您對項目的聲明或傳遞給new的類型的聲明是否是您的意思,但傳遞給new的聲明具有比item更高的間接級別。

暫無
暫無

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

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