2017-02-18 13 views
0

C++を使用してリンクされたリストを実装しようとしています。
私はを使用して実装しようとしている次のプログラムでは、リンクされたリストクラスがネストされた構造。スコープエラー

error: head was not declared in this scope

ここで何が問題になっています。しかし、フレンド関数で次のコードでSearchLL機能は、このエラーを与えていますか?

#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と呼ばれるオブジェクトに、ここで言及しています。表示されたコードにそのようなオブジェクトは定義されていません。

と呼ばれるクラスのメンバーがLinkedListクラスにあり、SearchLL()の友人です。ただし、headはクラスメンバであり、アクセスするにはクラスのインスタンスが必要です。

SearchLL()はあたかもクラスメソッドであるかのように書かれています。そうではない。それはfriend関数です。 friend関数はクラスメソッドではありません。thisはありません。それは、クラスのインスタンスが与えられた場合、そのクラスのfriendクラスの非公開メンバーおよびメソッドにアクセスできる関数です。それだけです。それでも、クラスインスタンスへのポインタ、または参照をfriend関数に明示的に渡す必要があります。

+0

これで解決しました。ありがとう! –

関連する問題