使用 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;
}

对了,这里有几个问题:

  1. return queue.operator==(queue1);

    您肯定想使用 return queue.operator==(queue1.queue); 或更短的 return queue == queue1.queue; 来比较内部 Queue::List,否则,有什么意义?

  2. bool operator==(List &queue);

    这个声明应该变成 bool operator==(const List &queue); 您基本上想在不更改任何内容时使用 const,因为它允许您将变量和常量传递给函数。如果您在这种情况下不这样做,您的代码将会中断,因为在第 1 点中您传递的是 const。

  3. bool List::operator==(List& queue)

    这应该变成 bool List::operator==(const List& queue) 因为定义应该匹配声明