我正在尝试使用 C ++ 实施链接列表。
在以下程序中,我尝试使用链接列表实施线性搜索。但是以下代码中的SearchLL
函数是友元函数,它给出了这个错误:
error: head was not declared in this scope
这里有什么问题?
#include<iostream>
using namespace std;
struct node
{
int info;
node* link;
};
class LinkedList
{
private:
node* head;
node* ptr;
public:
LinkedList()
{
head = NULL;
}
int addnode(int x)
{
if(head == NULL)
{
head = new node;
ptr = head;
ptr->info = x;
ptr->link = NULL;
}
else
{
node* n = new node;
ptr->link = n;
ptr = n;
ptr->info = x;
ptr->link = NULL;
}
return 1;
}
friend void searchLL(int);
};
void searchLL(int item)
{
node* temp = head;
node* loc = NULL;
while(temp->link!=NULL || item!=temp->info)
temp = temp->link;
if(temp->info == item);
cout<<endl<<loc;
return;
}
int main()
{
LinkedList l1;
l1.addnode(10);
l1.addnode(20);
searchLL(20);
return 0;
}
答案 0 :(得分:0)
node* temp = head;
SearchLL()
函数在这里指的是一个名为head
的对象。在显示的代码中没有定义这样的对象。
在head
班级中有一个名为LinkedList
的班级成员SearchLL()
是他的朋友。但是,head
是一个类成员,您需要一个类的实例来访问它。
似乎SearchLL()
就像是一个类方法一样。它不是。它是friend
函数。 friend
函数不是类方法,它没有this
。它只是一个函数,给定一个类的实例,可以访问其friend
类的非公共成员和方法,这就是全部。您仍然需要将指针或引用显式传递给类实例,并传递给友元函数。