我试图通过引用而不是值来比较两个单独链表中的节点。我的链表实现如下
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){
^
成员操作符总是将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;
}
或者你可以使用你的原始函数作为一个自由函数,但是你不能使用私有成员,除非你将它声明为友元。