2012-05-04 4 views
0

그래서 저는 bst의 각 노드에있는 각 항목에서 함수 f를 실행하기위한 함수 인 선주문 처리 기능을 가지고 있습니다. 함수는 다음과 같습니다 :템플릿 함수를 다른 템플릿 함수로 전달

template <class Item, class Key, class Process> 
void preorder_processing(bstNode<Item, Key>*& root, Process f) 
{ 
    if (root == NULL) return; 
    f(root); 
    preorder_processing(root->left(), f); 
    preorder_processing(root->right(), f); 
} 

불행히도, 내가 main 함수 내에서 클래스를 호출하면 오류가 발생합니다. 이 호출은 preorder_processing (root_ptr, print)입니다. 실제 기능 '인쇄'입니다 :

template<class Item> 
void print(Item a) 
{ 
    cout << a << endl; 
} 

오류 :

bstNode.cxx:23: error: no matching function for call to ‘ preorder_processing(bstNode<int, long unsigned int>* <unresolved overloaded function type>)

이 사람이 무슨 일이 일어나고 있는지 알고 있나요?

+0

당신은 줄 필요를 'inorder_processing()'의 선언도 기능합니다. print() 함수는 무엇을하고 있는가? – iammilind

+0

아, 두 가지 유사한 오류 메시지가 있는데, 비슷한 기능에 대해 잘못 게시했습니다. 내 잘못이야. preorder_processing()은 오류 메시지의 inorder가 아닙니다. – vanchagreen

답변

0

귀하의 root->left()root->right()를 rvalue 포인터입니다 bstNode<Item, Key>*를 반환해야합니다. 임시 포인터 변수에 const가 아닌 참조를 할당 할 수 없습니다.

변경 다음과 같이 선언 및 컴파일러 오류가 가야 :

void preorder_processing(bstNode<Item, Key>* root, Process f) 
       // removed reference ^^^ 

당신이 함수를 호출 할 때 또한, 두 번째 파라미터 Process f 어떤 가치를 전달되지 않습니다 :

preorder_processing(root->left(), ???); 
+0

그건 의미가 있고, 나는 그것을 지켜줄 것이지만, 그것이 우리의 문제를 해결하지 못했을 까봐 두렵습니다. 사실 아무것도 바꾸지 않았어. 똑같은 오류. – vanchagreen

+0

@vanchagreen, 내 대답에 명시된대로'Process f' 매개 변수를 확인 했습니까? – iammilind

+0

미안하지만, 나는 그것을 한순간에 꺼내어 다시는 넣지 않았다 : \ 그러나 그래도 여전히 작동하지 않는다. 그것은 함수에 대한 첫 번째 호출에서 충돌합니다. 그것은 그 안에 들어 가지 않습니다. – vanchagreen

관련 문제