gpt4 book ai didi

c++ - 重载赋值运算符 C++

转载 作者:行者123 更新时间:2023-11-28 08:05:38 25 4
gpt4 key购买 nike

家庭作业要求重载堆类的寄售运算符,该堆类用于在每个节点上存储指向队列的指针,以尝试模拟急诊室优先级队列。

到目前为止,这是我想出的代码:

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

关于可能导致它的原因以及我该如何解决它有什么想法吗?

最佳答案

你有 items声明为 std::queue<T> *items[50]; .使用 std::queue<T> ** items; ,或者更好,std::vector<std::queue<T>> items;

另外,delete * items;应该是 delete[] items;

编辑 - 我忘了添加 <T>std::queue 之后

关于c++ - 重载赋值运算符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com