2012-09-07 2 views
0

에서 함수를 호출 할 필요가 헤더 파일클래스의 목록을 링크하고 클래스 다음

class sv1{ 
private: 
    struct Node{ 
      string title; 
      Node* next; 
       }; 
public: 
void InsertAfter(Node **head, string title); 
void getMetadata(string t); 
void q_folder(string t_q); 

이 공통 파일이

void sv1::getMetadata(string t) 
{ 
Node *head=NULL; 
title=t; 
q_folder(title); 
} 
void sv1::q-folder(string t_q) 
{ 
InsertAfter(&head,t_q); 
} 
void sv1::insertAfter(Node **head,string title) 
{ 
if (head==NULL) 
{ 
Node* temp=NULL; 
temp=new Node; 
temp->title=title; 
*head=temp; 
} 
else{ 
Node *temp= new Node; 
temp= new Node; 
temp->title=title; 
temp->next=(*head)->next; 
(*head)->=temp; 

} 
} 

오류가 될 것이다 어떻게에게있다는 것을 말한다 head는 함수 q_folder에서 선언되지 않습니다. 그 원인은 무엇이며 어떻게 해결할 수 있습니까?

+0

야, 좋은 편집 롤백. 들여 쓰기를 좋아하지 않습니까? – jrok

답변

5

귀하의 방법에서 q- 폴더 인 경우, "& head"로 insertAfter를 호출하십시오. 모든 클래스의 방법이

  1. 지역
  2. 매개 변수
  3. 클래스 멤버 (상속 또는 기타)
  4. 글로벌 인 경우입니다에있는 유일한 방법 헤드는 인식 될 수있다 (단,이 고려 노 노)

어떻게 3 가지가 아닌지 확인하면 "& 머리"가 무엇을 의미하는지 알 수 없습니다. 게다가 언급 된 hmjd 수정으로, 선언 된 메소드 중 해당 클래스에 속하는 것으로 분류 된 메소드는 없습니다. 당신은 그들이 어떤 수업과도 독립적 인 분리 된 방법 인 것처럼 그것들을 썼습니다. 클래스가 sv1 클래스에 속한다는 것을 나타내려면 메소드 이름의 맨 앞에 "sv1 ::"을 추가해야합니다.

+0

q_folder의 머리글은 처음에 널 문자이어야합니다. 그러면 다시 삽입 할 때마다 이전 폴더를 나타냅니다. – Pcmsr

+0

죄송합니다. 모든 멤버 함수에 sv1 ::을 입력하지 않았습니다. – Pcmsr

+0

나는 같은 클래스의 다른 함수들로부터 q_folder를 여러 번 호출한다. 그래서 어떻게 완벽하게 연결된 목록을 얻을 수 있습니까? – Pcmsr

0

나는 당신이 잘못된 패턴을 추구하고 있다고 생각합니다. 왜 클래스의 private 섹션 안에 Node struct를 정의 했습니까? 일반적인 패턴은 Node와 LinkedList 자체에 대한 클래스를 분리해야한다는 것입니다. 노드를 캡슐화하는 또 다른 클래스를 생성하십시오. 또한 템플릿을 사용하여 다양한 데이터 유형을 지원하도록 구현할 수 있습니다.

head은 내부 변수입니다. 함수 인수로 받아 들여서는 안됩니다. 연결된 목록 (작동하는 경우)이 일관성이없고 모든 정의 변수가 변경 가능하기 때문에 이는 객체 지향이 아닙니다. LinkedList에 대해 head 비공개로 설정해야합니다. 여기 몇 가지 예를 찾을 수 있습니다

Simple C/C++ Linked List

How to create Linked list using C/C++

관련 문제