的左边必须有类/结构/联合
【BST.h】#include<iostream>
using namespace std;
#ifndef BINARY_SEARCH_TREE
#define BINARY_SEARCH_TREE
template<typename DataType>
class BST
{
private:
//节点类(内部)
class BinNode
{
public:
DataType data;
BinNode* left;
BinNode* right;
//BinNode构造函数
//默认构造函数
BinNode() :left(0), right(0){}
//显示值构造函数
BinNode(DataType item) :data(item), left(0), right(0){}
//重载<
bool operator<(DataType& item){ return data < item; }
//重载>
bool operator>(DataType& item){ return data > item; }
};
typedef BinNode* BinNodePointer;
//节点类声明结束
//辅助函数inorderAux()
void inorderAux(ostream& out, BinNodePointer subtreePtr)const;
//辅助函数graphAux()
void graphAux(ostream& out, int indent, BinNodePointer subtreePtr)const;
//辅助函数insertAux()
void insertAux(BinNodePointer subtreePtr, const DataType&item);
/*****数据成员*****/
BinNode* myRoot;
/*****函数成员*****/
public:
//空构造函数
BST();
//判空,如果BST为空,返回true
bool empty() const;
//中序遍历BST,使用私有的辅助函数inorderAux()
void inorder(ostream& out)const;
//BST的图形输出,使用私有的辅助函数graphAux()
void graph(ostream& out)const;
//查找函数,如果找到,返回true
bool search(const DataType& item)const;
//插入函数,使用私有的辅助函数insertAux()
void insert(const DataType& item);
};
#endif
【BST.cpp】
#include<iostream>
#include<iomanip>
#include"BST.h"
//---空构造函数的定义
template<typename DataType>
BST<DataType>::BST():myRoot(0){}
//---empty()的定义
template<typename DataType>
bool BST<DataType>::empty() const
{
return myRoot == 0;
}
//---inorder()的定义
template<typename DataType>
void BST<DataType>::inorder(ostream& out)const
{
innorderAux(out, myRoot);
}
//---辅助函数inorderAux()的定义
template<typename DataType>
void BST<DataType>::inorderAux(ostream& out, BinNodePointer subtreePtr)const
{
if (subtreeRoot != 0)
{
inorderAux(out, subtreePtr->left);
out << subtreeRoot->data << " ";
inorderAux(out, subtreePtr->right);
}
}
//---graph()的定义
template<typename DataType>
void BST<DataType>::graph(ostream& out)const
{
graphAux(out, 0, myRoot);
}
//---辅助函数graphAux()的定义
template<typename DataType>
void BST<DataType>::graphAux(ostream& out, int indent, BinNodePointer subtreePtr)const
{
if (subtreeRoot != 0)
{
graphAux(out, indent + 8, subtreePtr->right);
out << setw(indent) << " " << subtreePtr->data << endl;
graphAux(out, indent + 8, subtreePtr->left);
}
}
//---查找函数的定义
template<typename DataType>
bool BST<DataType>::search(const DataType& item)const
{
BST<DataType>::BinNode* locptr = myRoot;
bool found = false;
while (!found&&locptr != 0)
{
if (item < locptr->data)
locptr = locptr->left;
else if (item > locptr->data)
locptr = locptr->right;
else found = true;
}
return found;
}
//---插入函数的定义
template<typename DataType>
void BST<DataType>::insert(const DataType& item)
{
insertAux(myRoot, item);
}
//---辅助函数insertAux()的定义
template<typename DataType>
void BST<DataType>::insertAux(BinNodePointer subtreePtr, const DataType&item)
{
if (subtreePtr == 0)
subtreePtr = new BST<DataType>::BinNode(item);
else if (item < subtreePtr->data)
insertAux(subtreePtr->left, item);
else if (item > subtreePtr->data)
insertAux(subtreePtr->right, item);
else
cerr << "Item already in the tree\n";
}
【treetester.cpp】
#include<iostream>
#include"BST.h"
using namespace std;
int main()
{
BST<int> intBST();
for (int i = 0; i < 10; i++)
{
intBST.insert(i);
}
intBST.graph(cout);
}
1>------ 已启动生成: 项目: Project3, 配置: Debug Win32 ------
1> treetester.cpp
1>c:\users\chan\documents\visual studio 2013\projects\project3\project3\treetester.cpp(10): error C2228: “.insert”的左边必须有类/结构/联合
1>c:\users\chan\documents\visual studio 2013\projects\project3\project3\treetester.cpp(12): error C2228: “.graph”的左边必须有类/结构/联合
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========