嵌套结构与类。范围错误

时间:2017-02-18 15:16:42

标签: c++ class nested structure

我正在尝试使用 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;
}

1 个答案:

答案 0 :(得分:0)

node* temp = head;

SearchLL()函数在这里指的是一个名为head的对象。在显示的代码中没有定义这样的对象。

head班级中有一个名为LinkedList的班级成员SearchLL()是他的朋友。但是,head是一个类成员,您需要一个类的实例来访问它。

似乎SearchLL()就像是一个类方法一样。它不是。它是friend函数。 friend函数不是类方法,它没有this。它只是一个函数,给定一个类的实例,可以访问其friend类的非公共成员和方法,这就是全部。您仍然需要将指针或引用显式传递给类实例,并传递给友元函数。