我遇到了一些我不知道的错误,并且花了很多时间把我的头发拉出来。这是我的标题:
#ifndef MYBSTREE_H
#define MYBSTREE_H
#include "abstractbstree.h"
#include "MyBSTreeFunc.h"
using namespace std;
template<typename T>
class TreeNode
{
public:
T m_data;
TreeNode* m_right;
TreeNode* m_left;
};
template<typename T>
class MyBSTree:public AbstractBSTree<T> //LINE 18
{
private:
TreeNode<T>* m_root;
public:
void MyBSTree();
int size() const;
bool isEmpty() const;
int height() const;
const T& findMax() const;
const T& findMin() const;
int contains(const T& x) const;
void clear();
void insert(const T& x);
void remove(const T& x);
void printPreOrder() const;
void printPostOrder() const;
void print() const;
};
#endif
还有我的实现文件:
1-6 号线
void MyBSTree()
{
m_root -> m_data = NULL;
m_root -> m_right = NULL;
m_root -> m_left = NULL;
}
13-21 号线
template<typename T>
bool MyBSTree<T>::isEmpty() const
{
if (m_root== NULL)
return true;
else
return false;
}
28-35 号线
template < typename T >
const T& MyBSTree<T>::findMax() const
{
TreeNode* p = m_root;
while(p -> m_right != NULL)
p = p -> m_right;
return p;
}
实现中第 3 行的错误说 'm_root' 未在此范围内声明。但是第 4 行和第 5 行很酷。我猜是因为 m_data 不是指针?我不知道。
接下来,第 14 行和第 21 行以及许多其他人说它期望在 '<' 标记之前有一个初始化程序。我认为它们都是同一个问题,所以我在这里只放了一些。
最后,它在标题中的第 18 行说:“模板结构 MyBSTree 重新声明为另一种符号。” 然后它说我的实现的第 1 行是先前声明的“void MyBSTree”。我假设它们在一起。
感谢所有的帮助。