我试图通过引用而不是值来比较两个单独链接列表中的节点。 我对链表的实现如下
struct node{
node(char data):data(data), next(nullptr){}
char data;
node* next;
};
class slist{
node* head;
public:
slist(node* head):head(head){}
node*& getHead(){
return head;
}
void insert(char item){
node* p = new node(item);
if(head == nullptr){
head = p;
return;
}
p->next = head;
head = p;
}
这是我用来通过引用比较两个节点的重载运算符。
bool operator==(node*& p, node*& q){
if(p->data == q->data) return true;
return false;
}
static node* compare(node*& p, node*& q){
if(p == nullptr || q == nullptr) return nullptr;
node* current1 = p;
node* current2 = q;
while(current1 != nullptr){
while(current2 != nullptr){
if(current1 == current2) return current1;
current2 = current2->next;
}
current1 = current1->next;
}
return nullptr;
}
};
驱动程序代码如下:
bool operator==(node*& p, node*& q){
if(p->data == q->data) return true;
return false;
}
static node* intersection(node*& p, node*& q){
if(p == nullptr || q == nullptr) return nullptr;
node* current1 = p;
node* current2 = q;
while(current1 != nullptr){
while(current2 != nullptr){
if(current1 == current2) return current1;
current2 = current2->next;
}
current1 = current1->next;
}
return nullptr;
}
我一直得到的错误如下:
error: overloaded 'operator==' must be a binary operator (has 3 parameters)
bool operator==(node*& p, node*& q){
^
答案 0 :(得分:0)
成员运算符总是将this指针作为隐含参数,因此您只需要另一个对象。
bool operator==(node*& q){
if(this->data == q->data) return true; //Could also just have if(data == q->data) but this is a little more explicit
return false;
}
或者您可以将原件用作免费功能,但除非您将其声明为朋友,否则您将无法使用私人会员。