기능 포인터를 통해 클래스 객체에 대한 액세스가 필요합니다 - 이진 검색 트리 클래스 생성 관련

StackOverflow https://stackoverflow.com/questions/206498

문제

재귀를 사용하여 이진 검색 트리를위한 트래버스 생성.

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

기능은 다음과 같습니다. 이제 이것은 분명히 잘못되었습니다. 이 기능은 다음과 같이합니다.

first.inOrder(print_vals);

첫 번째는 객체이며 인쇄 Vals는 단순히 객체의 데이터가 무엇인지 인쇄하는 함수입니다. 각 객체, 데이터, 왼쪽 및 오른쪽에 세 가지 값이 있습니다. 실제로 기능으로 해당 항목에 어떻게 액세스합니까?

도움이 되었습니까?

해결책

전화처럼 보입니다 inOrderPtr(this->data) 그냥 통과하고 있습니다 data 트리 노드의 구성원 print_vals 기능. 액세스하려면 left 그리고 right 요소, 사용 inOrderPtr(*this). 선언과 같이 컴파일하려면 다양한 선언을 변경해야합니다. inOrderPtr 그리고 print_vals. 코드의 나머지 부분을 보지 않고 변경해야 할 사항을 말하기는 어렵습니다.

또 다른 메모에 따르면, 당신은 다음과 같이 재귀적인 전화를 쓰고 싶을 것 같습니다.

this->left->inOrder(inOrderPtr);

그래도 귀하의 구현에 대해 가정하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top