我正在处理异常处理,现在我遇到了一个我正在处理的问题。我正在尝试做的是在我的main函数中添加一个try-catch块来捕获我正在使用的函数抛出的异常。以下是我遇到麻烦的片段。
EmptyStackPopException
是一个空的Exception类,我放入我的stack.h
文件中,可以在这里看到:
class EmptyStackPopException {
};
这是应该抛出此异常的函数。
T Stack<T>::pop( ) throw (EmptyStackPopException)
{
if (isEmpty( ))
{
throw EmptyStackPopException();
}
T result = top->getData( );
Node<T> *discard;
discard = top;
top = top->getLink( );
delete discard;
return result;
}
这是我的主要功能的片段,其中应该捕获异常:
try {
cout << s.pop( );
} catch (EmptyStackPopException) {
cout << "EmptyStackPopException: You didn't enter anything in." << endl;
}
现在我遇到的问题是因为以下错误而无法编译:
..\assignment8\main.cpp(29) : error C2061: syntax error : identifier 'EmptyStackPopException'
..\assignment8\main.cpp(29) : error C2310: catch handlers must specify one type
..\assignment8\main.cpp(32) : error C2317: 'try' block starting on line '27' has no catch handlers
我很确定我目前唯一的错误是在main函数中,无法在客户端程序中检测到EmptyStackPopException,导致最后两个错误。
答案 0 :(得分:0)
您必须使用catch语句指定类型。这应该可以解决您提出的三个语法错误
try {
cout << s.pop( );
} catch (EmptyStackPopException& exception) {
cout << "EmptyStackPopException: You didn't enter anything in." << endl;
}
您需要创建&#39;例外&#39;。
如果包含您的EmptyStackPopException标头不起作用(基于上下文我不确定它会),问题可能是基于循环依赖,这意味着两个头文件相互包含。我不能从上下文中说出来但这有时会给我带来#34;语法错误:标识符&#34;错误。