2017-02-18 53 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

解決了我的查詢!謝謝! –