0

作业分配要求重载 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 =

items 在头文件中声明如下:

    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 的声明比项目多一级间接性。

于 2012-04-26T20:38:22.910 回答