gpt4 book ai didi

c++ - 捕获模板类中定义的异常的语法

转载 作者:行者123 更新时间:2023-11-28 05:40:30 27 4
gpt4 key购买 nike

我无法在网上找到这个,这是一个非常愚蠢的问题(只是关于语法):

我有以下代码

树.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_ */

最佳答案

这里有两个问题。

1) 你必须 #include一个头文件,以便在该头文件中提取声明。

2)

try{
//something
}catch(avlTree::EmptyTree&){
//something
}

即使你#include d 正确的头文件,这仍然行不通。它不会工作,原因很简单,因为没有这样的类称为 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++ 不是这样工作的。

关于c++ - 捕获模板类中定义的异常的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37221899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com