기능 포인터를 통해 클래스 객체에 대한 액세스가 필요합니다 - 이진 검색 트리 클래스 생성 관련
-
03-07-2019 - |
문제
재귀를 사용하여 이진 검색 트리를위한 트래버스 생성.
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);
그래도 귀하의 구현에 대해 가정하고 있습니다.
제휴하지 않습니다 StackOverflow