请版里的大侠们帮忙看一下
共4个文件,分别是TNode.h(节点文件类), BST.h,BST.cpp(二叉树类),TestTree.cpp(主程序)
代码如下:
TNode.h:
#ifndef TNODE_H
#define TNODE_H
template <typename T>
class TNode
{
public:
TNode(const T& val = T()):nodeValue(val), parent(NULL), left(NULL), right(NULL){}
private:
TNode<T> *parent, *left, *right;
T nodeValue;
};
#endif
#ifndef BST_H
#define BST_H
#include "TNode.h"
template <typename T>
class BST
{
public:
BST(TNode<T>* r = NULL):root(r){}
bool Insert(const T& val);
bool Search(const T& val) const;
bool Delete(const T& val);
void Print_InOrder(TNode<T>* r);
TNode<T>* getRoot() {return root;}
private:
TNode<T> *root;
};
#endif
#include <iostream>
#include "BST.h"
using namespace std;
template <typename T>
bool BST<T>::Insert(const T& val)
{
bool ins = false;
bool find = false;
TNode<T> *curr = root;
while (!curr && !find)
{
if(val < curr->nodeValue)
curr = curr->left;
else if (val > curr->nodeValue)
curr = curr->right;
else
find = true;
}
if(!find)
{
curr = new TNode(val);
ins = true;
}
return ins;
}
template <typename T>
bool BST<T>::Search(const T& val) const
{
}
template <typename T>
bool BST<T>::Delete(const T& val)
{
}
template <typename T>
void BST<T>::Print_InOrder(TNode<T>* r)
{
if(r)
{
Print_InOrder(r->left);
cout << r->nodeValue;
Print_InOrder(r->right);
}
}
#include <iostream>
#include "TNode.h"
#include "BST.h"
using namespace std;
int main()
{
BST<int> btree;
int n;
for (int i = 0; i < 3; i++)
{
cout << "Please input a number" << endl;
cin >> n;
btree.Insert(n);
}
TNode<int> *root = btree.getRoot();
btree.Print_InOrder(root);
return 0;
}
1>TreeTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall BST<int>::Print_InOrder(class TNode<int> *)" (?Print_InOrder@?$BST@H@@QAEXPAV?$TNode@H@@@Z) referenced in function _main
小弟我是在visual studio下编译的。
我自己的判断,问题的原因是主程序找不到BST类里成员函数的定义。但如何才能解决这个问题呢?(我不想把类的定义和声明写进同一个文件) c++ 类 头文件
[解决办法]
普通类可以分开写,但模板类则必须把类的定义和声明写到一起。
[解决办法]