2015-01-23 3 views
0

노드 추가, 노드 삭제 및 목록에서 반복적으로 검색과 같은 몇 가지 기본 기능을 사용하여 연결된 목록 클래스를 작성하려고합니다. 목록의 머리글을 개인 변수로 정의했지만 재귀 검색 함수에 액세스해야하므로 머리글 포인터를 반환하는 GetHead() 함수를 정의하려고했습니다. 그러나 NetBeans에서 컴파일하는 데 문제가 있습니다. 문제에 거기에 내가 컴파일 할 때연결된 목록 클래스의 구조체에 대한 포인터 반환

nodePtr List::GetHead(){ 
    return head; 
} 

, 나는

error: unknown type name 'nodePtr' 
error: cannot initialize return object of type 'int' 
     with an lvalue of type 'nodePtr' (aka 'List::node *') 

를 얻을 : 여기

다음과 같이

class List{ 
private: 

    typedef struct node{ 
     int data; 
     node* next; 
    }*nodePtr; 

    nodePtr head; 
    nodePtr curr; 
    nodePtr temp; 

public: 
    List(); 
    void AddNode(int addData); 
    void DelNode(int delData); 
    void PrintList(); 
    void SearchRecursive(nodePtr Ptr, int searchVal); 
    nodePtr GetHead(); 
}; 

GetHead() 함수는 클래스의 헤더입니다 구조체 노드에 포인터를 어떻게 반환합니까?

+0

'nodePtr GetHead();''private' 클래스 섹션에서'nodePtr'이 선언 되었기 때문에 이것은'public' 액세스 범위에서 작동하지 않습니다. –

+0

@ πάνταῥεῖ 실제로, 'auto'를 사용하면 작동합니다. 당신이 개인적인 것을 지명하지 않는 한 ... – juanchopanza

+0

@juanchopanza 아, THX! 좋은 점은 '자동'에 대해 생각하지 않았다는 것입니다. –

답변

4

nodePtrList에 정의 된, 그래서 당신은 권리 범위를 필요로한다 : 당신은 개인 범위의 클래스 내부 구조체를 정의

1) :

List::nodePtr List::GetHead() 
^^^^^^ 
+0

물론 이죠? 'nodePtr'typedef는'private' 클래스이고'GetHead()'는'public' 클래스입니다. –

+1

@ πάνταῥεῖ : 그것은 당신이 기능을 정의하는 것을 멈추게하지 않고 단지 사용하기에 약간 불편합니다. –

+0

그걸 수정 한 것 같습니다. 감사! – Bilentor

0

가 컴파일 얻을 수있는 두 가지 방법이 있습니다를 .... 그것은 세계의 다른 곳에서 그것을 숨 깁니다. 그러나 juanchopanza가 지적한대로 범위를 지정해야합니다.

2) 노드 외부의 정의를 클래스 외부로 가져 오는 또 다른 방법은 함수 프로토 타입을 변경하지 않고 작동해야합니다.

나머지 세계는 링크드 목록 클래스와 별개로 사용하지 않기 때문에 처음에는 더 좋을 것입니다.

관련 문제