指针返回时编译错误

时间:2011-05-29 10:29:55

标签: c++ pointers binary-search-tree

我的BST课程与this thread

相同

BST.hpp

template<class T> 
class BinarySearchTree
{
 private:
  struct tree_node
  {
    tree_node* left;
    tree_node* right;
    T data;

    tree_node( const T & thedata, tree_node * l = NULL, tree_node * r = NULL )
            : data( thedata ), left( l ), right( r ) { }
  };
tree_node* root;

public:
  //some functions
private:
  struct tree_node* minFunc( tree_node** node);
};

我试图从this thread完成函数返回指针。

minFunc的定义在同一个BST.hpp文件中

template <class T>
struct tree_node* BST<T>::minFunc(tree_node** node)
{
tree_node* current = *node;
while(current->left != NULL)
{
    current = current->left;
}
return current;
}

无法找出编译错误

错误C2143:语法错误:缺少';'在'*'之前

错误C2065:'T':未声明的标识符

错误C2955:'BST':使用类模板requ i res模板参数列表

错误C2509:'minFunc':未在'BST'中声明成员函数

所有这些指向定义

3 个答案:

答案 0 :(得分:2)

我最好的猜测是struct tree_node不可见。它可能没有在某个类中声明/声明。

答案 1 :(得分:1)

  1. 更改此声明:

    struct tree_node * minFunc(tree_node ** node);

  2. 进入这个

    tree_node* minFunc( tree_node** node);
    

    相应地更改它的定义。

    1. 双指针是设计糟糕的明确标志
    2. 您是否包含定义struct tree_node的标头?
    3. 修改

      定义应该是

      template <class T>
      typename BST<T>::tree_node* BST<T>::minFunc(tree_node** node)
      {
      tree_node* current = *node;
      while(current->left != NULL)
      {
          current = current->left;
      }
      return current;
      }
      

      顺便说一句,请注意minFunc方法是私有的,并且无法在类之外访问它

答案 2 :(得分:0)

treenode是BST中的私有结构 - 您无法在BST之外访问它