二叉搜索树实现。编译问题

Binary Search Tree Implementation. Problems With Compilation

基本上,我在头文件和带有搜索功能的 cpp 文件中都遇到了问题。它只是说 "Member declaration not found" 和 "prototype for 'node *BTree::search(int) does not match any in class BTree"。我只在 cpp 文件中列出了搜索功能以使其更容易,因为我的插入和 destroy_tree 功能都可以正常工作。

头文件:

#ifndef BTREE_H_
#define BTREE_H_

class BTree {


public:
struct node{

int key_value;
node *left;
node *right;
};

BTree();
virtual ~BTree();

void insert(int key);
node* search(int key);
void destroy_tree();
node *root;


private:

void insert(int key, node *leaf);
node* search(int key, node *leaf);
void destroy_tree(node *leaf);



};

#endif /* BTREE_H_ */

实施:

#include "BTree.h"
#include <iostream>
using namespace std;
struct node{

            int key_value;
            node *left;
            node *right;
        };

BTree::BTree() {

root = NULL;
}

BTree::~BTree() {

destroy_tree();
}

node BTree::*search(int key, node *leaf){

if(leaf != NULL){

    if(key == leaf->key_value){

        return leaf;
    }
    if(key < leaf->key_value){

        return search(key, leaf->left);
    }

    else{

        return search(key, leaf->right);
    }
}
else return NULL;
}


node *BTree::search(int key){

return search(key, root);
}

您有两个 struct node 结构,一个在全局声明(在您的 .cpp 文件中),一个在 BTree class 中声明。这是两个不同的结构,一个名为 ::node(全局),另一个名为 BTree::node。在您的头文件中 search 指的是 class 中定义的那个,而 .cpp 文件中的函数声明指的是全局的。

删除全局结构,并改为使用 BTree::node *BTree::search 声明搜索函数。