二叉搜索树实现。编译问题
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
声明搜索函数。
基本上,我在头文件和带有搜索功能的 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
声明搜索函数。