基本上,我在头文件和带有搜索功能的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);
}
答案 0 :(得分:0)
您有两个PID
结构,一个全局声明(在.cpp文件中),另一个在struct node
类中声明。这是两种不同的结构,一种名为BTree
(全局),另一种::node
。在头文件中BTree::node
引用类中定义的文件,而.cpp文件中的函数声明引用全局函数。
删除全局结构,然后使用search
声明搜索功能。