0

宿題の割り当てでは、緊急治療室の優先キューをエミュレートするために、すべてのノードのキューへのポインターを格納するために使用されるヒープクラスの委託オペレーターのオーバーロードが必要です。

これまでのところ、私が思いついたコードは次のとおりです。

    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]'

何が原因で、どうすれば解決できるかについてのアイデアはありますか?

4

2 に答える 2

1

itemsとして宣言されていますstd::queue<T> *items[50];。、std::queue<T> ** items;または、より良い、std::vector<std::queue<T>> items;

またdelete * items;delete[] items;

<T>編集 -後に追加するのを忘れましたstd::queue

于 2012-04-26T20:35:55.467 に答える
0

new渡された型へのポインタを返すため、現在は不一致です。アイテムの宣言またはnewに渡されるタイプのどちらが意味するのかはわかりませんが、newに渡される宣言には、アイテムよりも1レベル多い間接参照があります。

于 2012-04-26T20:38:22.910 に答える