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