重载赋值运算符C ++

时间:2012-04-26 20:30:55

标签: c++ arrays templates operator-overloading

家庭作业分配调用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]'

关于可能导致它的原因以及我如何解决它的任何想法?

2 个答案:

答案 0 :(得分:1)

您已将items声明为std::queue<T> *items[50];。使用std::queue<T> ** items;,或者更好,std::vector<std::queue<T>> items;

此外,delete * items;应为delete[] items;

编辑 - 我忘记在<T>

之后添加std::queue

答案 1 :(得分:0)

new返回指向传入类型的指针,因此它现在不匹配。我无法判断您对项目的声明或传递给new的类型是否是您的意思,但传递给new的那个声明是否比项目更具间接性。