C ++之间的异常处理

时间:2015-03-18 02:33:37

标签: c++ exception exception-handling

我正在处理异常处理,现在我遇到了一个我正在处理的问题。我正在尝试做的是在我的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,导致最后两个错误。

1 个答案:

答案 0 :(得分:0)

您必须使用catch语句指定类型。这应该可以解决您提出的三个语法错误

try {
    cout << s.pop( );
} catch (EmptyStackPopException& exception) {
    cout << "EmptyStackPopException: You didn't enter anything in." << endl;
}

您需要创建&#39;例外&#39;。

如果包含您的EmptyStackPopException标头不起作用(基于上下文我不确定它会),问题可能是基于循环依赖,这意味着两个头文件相互包含。我不能从上下文中说出来但这有时会给我带来#34;语法错误:标识符&#34;错误。