家庭作业分配调用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]'
关于可能导致它的原因以及我如何解决它的任何想法?
答案 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的那个声明是否比项目更具间接性。