所以我有一个binTree.h头文件,看起来像:

template<class T> class binTree {
public:
    binTree();
    ~binTree();
    void insert(T val);
    T find(T val) const;
    T remove(T val);

private:
    struct node {
        T val;
        node* left;
        node* right;

        node(T v, node* l, node* r) :
                val(v), left(l), right(r) {
        }
    };

    void destruct(node* n);
    void insert(T val, node* n);
    T find(T val, node* n) const;
    T remove(T val, node* n, node* parent);

    node* root;
};

现在在binTree.cpp文件中,我实现了仅在.cpp文件中使用的以下方法,因为您可以看到它未在头文件中声明。我在正确声明此方法时遇到麻烦。
node* maximum(node* n) { // line 79
   if (n->right == null) {
      return n;
   } else {
      return maximum(n->right);
   }
}

我得到错误:
line 79: error: expected constructor, destructor, or type converstion before '*' token

我怎样才能解决这个问题?

最佳答案

首先,即使您输入node也不是一种类型:

template <class T>
binTree<T>::node* maximum(binTree<T>::node* n){}
binTree<T>::node是从属名称,而不是类型。
此外,您提到的错误基本上是在任何功能块之外执行某些处理或执行其他愚蠢的错误(例如this)时发生的

其次,如果您的类是模板化的,则不能在另一个cpp文件中编写实现,除非它是专门化的,例如:
binTree<int>::binTree()
{
    //some code
}

10-06 11:18