私が知らないいくつかのエラーが発生し、髪の毛を抜くのに多くの時間を費やしました。ここに私のヘッダーがあります:
#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 行目で「テンプレート struct MyBSTree が別の種類のシンボルとして再宣言されました」と述べています。次に、実装の 1 行目は「void MyBSTree」の前の宣言であると表示されます。これらは一緒に行われると想定しています。
すべての助けをありがとう。