【发布时间】:2021-07-16 21:11:09
【问题描述】:
我在 Xcode 中插入“merge_queues”函数时遇到了一些问题。
这是使用模板的队列
#include "Problem1.hpp"
using namespace std;
const int DefaultSize = 10;
template <class T>
class Queue
{
public:
Queue(int queueCapacity = DefaultSize);
void getSize();
bool IsFull();
T &Front() const;
void push (const T& item);
bool IsEmpty();
T* pop(T&);
// if IsEmpty(), then QueueEmpty(); else remove and return the topmost element of the Queue
void QueueEmpty() {cout << "empty" << endl;};
void QueueFull() {cout << "full" << endl;};
void merge_queues(T &queue1,T &queue2);
void Output();
private:
int front;
int rear;
T *queue;
int capacity;
};
这里是 merge_queues 函数:
template <class T>
void Queue<T>::merge_queues(T &queue1,T &queue2) {
Queue<T> merged_queue;
// inserting in final queue
while(!IsEmpty() || !queue1.IsEmpty()) {
// inserting element of q1 if q1 is non-empty
if(!IsEmpty()) {
merged_queue.push(Front());
pop();
}
// inserting element of q2 if q2 is non-empty
if(!queue1.IsEmpty()) {
merged_queue.push(queue1.Front());
queue1.pop();
}
}
return merged_queue;
}
我的 Xcode 没有任何错误,
但是我不知道如何在main函数中使用,谁能帮我弄清楚?
这是我的主要功能
int main()
{
int x;
Queue<int> q1(5);
Queue<int> q2(6);
Queue<int> q3(11);
cout<<"queue1:\n";
q1.Output();
q1.getSize();
q1.push(1);
q1.Output();
q1.getSize();
q1.push(2);
q1.Output();
q1.getSize();
q1.push(3);
q1.Output();
q1.getSize();
q1.push(4);
q1.Output();
q1.getSize();
q1.push(5);
q1.Output();
q1.getSize();
cout<<"queue2: \n";
q2.Output();
q2.getSize();
q2.push(6);
q2.Output();
q2.getSize();
q2.push(5);
q2.Output();
q2.getSize();
q2.push(4);
q2.Output();
q2.getSize();
q2.push(3);
q2.Output();
q2.getSize();
q2.push(2);
q2.Output();
q2.getSize();
q2.push(1);
q2.Output();
q2.getSize();
q2.pop(x);
q2.Output();
q2.getSize();
merge_queues(q1,q2);
}
merge_queues(q1,q2)出现错误;
如何重写 merge_queues 以将两个队列合并为一个。
谢谢。:)
我尝试了另一种方法 将函数 merge_queues 更改为
template <class T>
void Queue<T>::merge_queues(T &queue1) {
Queue<T> merged_queue;
// inserting in final queue
while(!IsEmpty() || !queue1.IsEmpty()) {
// inserting element of q1 if q1 is non-empty
if(!IsEmpty()) {
merged_queue.push(Front());
pop();
}
// inserting element of q2 if q2 is non-empty
if(!queue1.IsEmpty()) {
merged_queue.push(queue1.Front());
queue1.pop();
}
}
return merged_queue;
}
主要功能
q1.merge_queues(q2);
但错误是
Non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'Queue<int>'
不知道是不是模板的问题
【问题讨论】:
-
您可以执行
q1.merege_queues(q2)并从merge_queues方法中删除一个arugmet。 -
是的,我尝试了不同的方法,但仍然出现错误。
-
你能说出这个错误发生在哪一行吗?
标签: c++ computer-science