2013-04-24 3 views
0

C++에서 이진 트리 (링크 된 노드 표현 사용)를 작성하고 있습니다. 나는 트리의 노드 수를 계산하는 멤버 함수를 작성하려면, 그래서 나는이 일을 할 수있는 재귀 함수를 작성 :재귀 함수의 반환 값을 const로 설정할 수 있습니까?

template<class Item> size_t binary_tree<Item>::count_node(
           binary_tree_node<Item>* const node) 
{ 
    if(node == NULL) return 0; 
    else return 1 + count_node(node->get_left()) 
        + count_node(node->get_right()); 
} 

내가 binary_tree 클래스의 사설에서이 기능을 설정합니다. 내가 공용 함수의 크기가()를 호출합니다 :

template<class Item> size_t binary_tree<Item>::size() 
{ 
    return count_node(root); 
} 

지금 여기 내 질문에 온다 : 나는 코드까지 같은 크기()를 작성하는 경우, 그것은 잘 작동합니다. 하지만 다음과 같이 반환 값을 const로 설정하면

template<class Item> size_t binary_tree<Item>::size() const 
{ 
    return count_node(root); 
} 

이 코드를 컴파일 할 수 없습니다. 컴파일러는 size_t를 const size_t로 전송할 수 없다고 불평합니다. 이 문제를 해결하는 방법? 감사. const 방법의 내부이라고

답변

4

모든 방법 const 자체를 할 필요가있다. 따라서 귀하의 경우 count_node 클래스도 const으로 표시해야합니다.

더 공식적으로, 당신은 함수의 내부에 들어 가지 경우가 const 표시의 this 포인터가 const T*이되고, 다음에이 때문에 따라서 당신은 또한 const T*에 동의하지 않을 그것을 사용하는 방법을 호출 할 수 없습니다 허용되지 않는 T*,에 const T*를 캐스팅. 당신이 정말로 const를하지 뭔가를하려는 경우 CONST 다움 (하지 않는 것이 좋습니다)를 제거하는 const_cast를 사용하거나 휘발성 회원/방법을 사용할 수 있습니다.

+0

감사합니다. 이것은 나를 위해 일합니다. @ Xymostech – Tian

+0

@Tian Glad 도움이되었습니다. 또한 나중에 참조 할 수 있도록 게시물을 작성한 경우 다른 사람에게 @ 작성하지 않아도됩니다. 항상 공지됩니다. – Xymostech

관련 문제