我无法在网上找到这个,这是一个非常愚蠢的问题(只是语法):
我有以下代码
tree.h中 -
#ifndef AVLTree_H_
#define AVLTree_H_
template <class ValueType,class CompareFunction>
class avlTree{
class avlTreeException{};
public:
class EmptyTree : public avlTreeException{};
};
#endif /* AVLTree_H_ */
我如何捕捉空树?意思是,我有另一个文件statistics.h -
#ifndef STAT_H_
#define STAT_H_
try{
//something
}catch(avlTree::EmptyTree&){
//something
}
#endif /* STAT_H_ */
答案 0 :(得分:1)
这里有两个问题。
1)你必须#include
一个头文件,以便在该头文件中引入声明。
2)
try{
//something
}catch(avlTree::EmptyTree&){
//something
}
即使你#include
正确的头文件,这仍然无法正常工作。它不会起作用,原因很简单,就是这里没有名为avlTree::EmptyTree
的类。甚至没有一个名为avlTree
的课程。
avlTree
不是一个班级。它是一个模板。仅在实例化模板时,例如:
avlTree<int, SomeKindOfComparisonClass>
你得到一个课程,在这种情况下称为avlTree<int, SomeKindOfComparisonClass>
;那么你就能够抓住它的EmptyTree
内部阶级:
try{
//something
}catch(avlTree<int, SomeKindOfComparisonClass>::EmptyTree&){
//something
}
不幸的是,你不能写出类似的东西:
try{
//something
}catch(template<typename ValueType,
typename ComparisonFunction>
avlTree<ValueType, ComparisonFunction>::EmptyTree&){
//something
}
C ++不会这样做。