2017-12-09 1 views
-2

클래스 멤버 함수로 머리글을 초기화하면 머리글이 NULL이 아닌 이유는 무엇입니까? 그것은 까다로운 부분입니다. 클래스 멤버 함수를 사용하여 변수 초기화

#include <iostream> 
using namespace std; 

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


class linked_list 
{ 
private: 
    node *head; 
public: 

    void push(node *head, int data); 
    void printList(node *head); 
    void printMiddle(node *head); 
    void makeHeadNull(node *head); 
}; 

void linked_list::push(node *head, int data) 
{ 
    node *newNode=new node; 
    if(head==NULL) 
    { 
     head=newNode; 
    } 
    else { 
     newNode->data = data; 
     newNode->next = head; 
     head = newNode; 
    } 
} 



void linked_list::printMiddle(node *head) 
{ 

     node *slow_ptr = head; 
     node *fast_ptr = head; 

     if (head!=NULL) 
     { 
      while (fast_ptr != NULL && fast_ptr->next != NULL) 
      { 
       fast_ptr = fast_ptr->next->next; 
       slow_ptr = slow_ptr->next; 
      } 
      cout<<slow_ptr->data<<" "; 
    } 



void linked_list::printList(node *head) 
{ 
    while(head!=NULL) 
    { 
     cout<<head->data<<" "; 
     head=head->next; 

    } 
} 

void linked_list::makeHeadNull(node *head) 
{ 
    head=NULL; 
} 



int main() 
{ 
    node *head; 
    linked_list l; 
    l.makeHeadNull(head); 


    l.push(head, 0); 
    l.push(head, 1); 
    l.push(head, 2); 
    l.push(head, 3); 
    l.push(head, 4); 

    l.printMiddle(head); 
} 

나는 생성자 내부에 머리를 초기화하고 싶었다,하지만 난 그런 식으로 머리를 초기화 할 때, 헤드 노드는 항상 주 안에 NULL있다. 생성자에서 머리글을 초기화하고 함수 밀어 넣기의 매개 변수로 전달하려면 오류가 발생합니다.

+0

코드 예제를 질문과 관련된 부분으로 좁혀주십시오. [MCVE]를 만드는 방법을 참조하십시오. – user0042

+0

좋아, 이제 최소 버전을 게시 할 것입니다 – Tat

+0

당신이 말하는이 생성자는 어디에 있습니까? – molbdnilo

답변

0

왜 클래스 멤버 함수로 초기화하면 머리가 처음에 NULL이 아닌지.

회원 변수는 절대로 사용하지 마십시오. 대신 main에 로컬 변수 인 head을 전달하고 해당 변수를 초기화하지 않은 상태로 두었습니다.

push은 구성원 head을 수정하지 않으며 main의 로컬 변수를 수정하지 않습니다. head = newNode;은 멤버 함수에 로컬 인 변수를 수정합니다.이 함수는 할당이 무의미 해지면 반환됩니다.

귀하의 의도는 회원 또는 기능에 전달 된 포인터를 수정하는 것으로 판단됩니다. 전달 된 포인터를 수정하려면 포인터를 참조로 전달하십시오. 멤버 변수를 수정하려면 this->을 사용하거나 같은 이름의 로컬 변수로 멤버를 숨기지 마십시오.

+0

@Tat 음,'push' 함수의'head' 인수로 무엇을 할 계획입니까? 그 인자와'head'라는 멤버 변수 사이의 관계는 무엇입니까? – user2079303

+0

클래스 멤버 변수 head를 밀어 넣을 것이라고 생각했지만 게시물 다음에 클래스 멤버 변수 머리가 아니라는 것을 알았습니다. 함수 자체의 머리입니다 – Tat

+0

나는 사람들을위한 솔루션을 게시 할 수있는 곳에서 문제를 해결했습니다. 관심있는 – Tat

관련 문제