我正在创建一个BST类,我希望将遍历函数(inorer,preorder,postorder,levelscan)放在一个单独的文件中。我不确定如何继续这个。我尝试制作一个.h文件,但它没有用。既然它不是真正的类定义,我还应该进行Traversal类吗?或者直接进行功能定义?
#ifndef TREETRAV_H
#define TREETRAV_H
#include "TreeNode.h"
#include <iostream.h>
#include <stdlib.h>
template <class T>
class TreeTrav
{
friend class BinSTree<T>;
public:
void PreOrderVisit(TreeNode *t, void visit(T& item));
void InOrderVisit(TreeNode *t, void visit(T& item));
void PostOrderVisit(TreeNode *t, void visit(T& item));
void LevelScan(TreeNode *t, void visit(T& item));
};
#endif
答案 0 :(得分:2)
由于TreeTrav
是类模板,因此无法在单独的CPP文件中实现此类。这不行。模板遵循两阶段编译过程。第一阶段将检查基本语法(如正确的循环使用,正确的括号等)。第二阶段实际上将根据模板类型进行编译。因此,.CPP文件只有第一阶段的编译,后来你会收到链接器错误(例如TreeTrav<int>::foo
未定义)。
最好只在头文件中实现所有类(模板)。或者您可能必须将#include<cpp-file-name>
放在此头文件的末尾。