使用 operator== c++ 时将队列转换为链表
converting queue to linked list when using operator== c++
我有一个队列和一个链表。我试图通过队列函数调用链表中的 operator== 函数。作业要求我比较 2 个队列,看看它们是否相同。我已经包含了每个文件中给我带来麻烦的函数。
我收到的错误消息是“C2664 'bool List::operator ==(List &)':无法将参数 1 从 'const Q' 转换为 'List &'"
queue.h
class Q
{
public:
Q();
Q(const Q &queue);
~Q();
bool operator==(const Q &queue);
private:
List queue;
};
queue.cpp
Q::Q(){}//constuctor
Q::Q(const Q &queue){}//copy constructor
Q::~Q(){}//deconstuctor
bool Q::operator==(const Q &queue1)//this is where the problem is
{
return queue.operator==(queue1);
}
list.h
class List
{
private:
struct Node
{
int data;
Node* next;
Node() : next(NULL) {} //define our own default constructor
Node(int data) : next(NULL), data(data) {}
};
typedef struct Node* NodeRef;
NodeRef head;
NodeRef tail;
NodeRef iterator;
NodeRef current1;
int size;
public:
List();
~List();
List(const List &list);
bool operator==(List &queue);// this is where i have the problem
};
list.cpp
bool List::operator==(List& queue)
{
if (size != queue.size)
return false;
iterator = head;
NodeRef temp = queue.head;
while (iterator != NULL)
{
if (iterator->data != temp->data)
return false;
temp = temp->next;
iterator = iterator->next;
}
return true;
}
main.cpp
Q k,qw;
if (k == qw)
cout << "Lists are equal!\n";
else
cout << "Lists are unequal!\n";
请帮忙。
你需要进行同类比较,在这种情况下 Q
只有一个 queue
元素(实际上是一个 List
),所以当比较 Q
类型的对象时=11=],你需要比较他们的queue
个元素。
因为您已经有了 List
class 的 operator ==
,所以这很简单。
bool Q::operator==(const Q &queue1)
{
return queue == queue1.queue;
}
对了,这里有几个问题:
return queue.operator==(queue1);
您肯定想使用 return queue.operator==(queue1.queue);
或更短的 return queue == queue1.queue;
来比较内部 Queue::List
,否则,有什么意义?
bool operator==(List &queue);
这个声明应该变成 bool operator==(const List &queue);
您基本上想在不更改任何内容时使用 const,因为它允许您将变量和常量传递给函数。如果您在这种情况下不这样做,您的代码将会中断,因为在第 1 点中您传递的是 const。
bool List::operator==(List& queue)
这应该变成 bool List::operator==(const List& queue)
因为定义应该匹配声明
我有一个队列和一个链表。我试图通过队列函数调用链表中的 operator== 函数。作业要求我比较 2 个队列,看看它们是否相同。我已经包含了每个文件中给我带来麻烦的函数。
我收到的错误消息是“C2664 'bool List::operator ==(List &)':无法将参数 1 从 'const Q' 转换为 'List &'"
queue.h
class Q
{
public:
Q();
Q(const Q &queue);
~Q();
bool operator==(const Q &queue);
private:
List queue;
};
queue.cpp
Q::Q(){}//constuctor
Q::Q(const Q &queue){}//copy constructor
Q::~Q(){}//deconstuctor
bool Q::operator==(const Q &queue1)//this is where the problem is
{
return queue.operator==(queue1);
}
list.h
class List
{
private:
struct Node
{
int data;
Node* next;
Node() : next(NULL) {} //define our own default constructor
Node(int data) : next(NULL), data(data) {}
};
typedef struct Node* NodeRef;
NodeRef head;
NodeRef tail;
NodeRef iterator;
NodeRef current1;
int size;
public:
List();
~List();
List(const List &list);
bool operator==(List &queue);// this is where i have the problem
};
list.cpp
bool List::operator==(List& queue)
{
if (size != queue.size)
return false;
iterator = head;
NodeRef temp = queue.head;
while (iterator != NULL)
{
if (iterator->data != temp->data)
return false;
temp = temp->next;
iterator = iterator->next;
}
return true;
}
main.cpp
Q k,qw;
if (k == qw)
cout << "Lists are equal!\n";
else
cout << "Lists are unequal!\n";
请帮忙。
你需要进行同类比较,在这种情况下 Q
只有一个 queue
元素(实际上是一个 List
),所以当比较 Q
类型的对象时=11=],你需要比较他们的queue
个元素。
因为您已经有了 List
class 的 operator ==
,所以这很简单。
bool Q::operator==(const Q &queue1)
{
return queue == queue1.queue;
}
对了,这里有几个问题:
return queue.operator==(queue1);
您肯定想使用
return queue.operator==(queue1.queue);
或更短的return queue == queue1.queue;
来比较内部Queue::List
,否则,有什么意义?bool operator==(List &queue);
这个声明应该变成
bool operator==(const List &queue);
您基本上想在不更改任何内容时使用 const,因为它允许您将变量和常量传递给函数。如果您在这种情况下不这样做,您的代码将会中断,因为在第 1 点中您传递的是 const。bool List::operator==(List& queue)
这应该变成
bool List::operator==(const List& queue)
因为定义应该匹配声明