C++中如何返回一个struct类型的指针

Nostalie
  • 49
template<typename T>
class BST {
private:
    struct tree_node {
        T data_field;
        tree_node* left_child;
        tree_node* right_child;
    };
    tree_node* root_node_pointer;
public:
    BST();
    /* 这里声明返回根节点指针时候编译都是没问题的 */
    tree_node* get_root_pointer();
    ~BST();
};

/* 然而到了实现该函数的地方…… */
template<typename T>
tree_node* BST<T>::get_root_pointer() {
    return root_node_pointer;
}
/*
    编译的时候报错:
    error: 'tree_node' does not name a type
*/

请问这个是怎么回事……
编译的时候使用g++ -std=c++14;
谢谢各位大神~

回复
阅读 2.7k
3 个回答
✓ 已被采纳

tree_node类定义在BST里边,实现的时候自然找不到。
就像函数定义时要加类名变为 BST<T>::get_root_pointer() 一样,返回值类型也应写为 BST<T>::tree_node* 。
由于是模板类,所以前边要加上typename。
最后的正确代码是

template<typename T>
typename BST<T>::tree_node* BST<T>::get_root_pointer() {
    return root_node_pointer;
}

get_root_pointer作为public访问级别不能返回private级别类型定义(即tree_node)

那个根指针可以是private的。但是struct类型定义,请放到public部分去。
建议你把public部分放在前面。

宣传栏