2017-02-18 28 views
0

Я здесь пытаюсь реализовать Связанные списки с использованием 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
node* temp = head; 

SearchLL() функция ссылается здесь на объект под названием head. В показанном коде нет такого объекта.

Существует класс, который называется head, в классе LinkedList, который SearchLL() является другом. Тем не менее, head является членом класса, и вам нужен экземпляр класса для доступа к нему.

Похоже, что SearchLL() написан, как если бы это был метод класса. Это не. Это функция friend. A friend Функция не метод класса, она не имеет this. Это просто функция, которая, учитывая экземпляр класса, будет иметь доступ к другим непубличным членам и методам класса friend, вот и все. Вам все равно нужно явно передать указатель или ссылку на экземпляр класса в функцию друга.

+0

Это разрешило мой запрос! Благодаря! –