二进制搜索树实现。编译问题

时间:2016-10-20 00:25:13

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

基本上,我在头文件和带有搜索功能的cpp文件中都遇到了问题。它只是说“未找到成员声明”和“节点* BTree :: search(int)的原型与BTree中的任何一个都不匹配”。我只列出了cpp文件中的搜索功能,以便更容易,因为我的insert和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);
}

1 个答案:

答案 0 :(得分:0)

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

删除全局结构,然后使用search声明搜索功能。