编辑:这本书没有任何问题,我只是未能正确复制其中提供的代码。该try-catch
块应该在while循环内,而我把它放在它外面。
关于 Stroutrup 的第 7 章第 7 节(“从错误中恢复”)的“编程:使用 C++ 的原理和实践”,我可能会遗漏一些东西。我希望读过这本书的人能够帮助我(或者任何人,实际上!)。
我们开发了一个带有令牌解析器的计算器。当程序读取一个无效的令牌时,它就终止了。第 7 节的目标是使计算器从此类错误中恢复而不终止。我的问题是,在遵循本书的指示后,计算器仍会在令牌无效后终止。
这是计算器的完整代码。这是 std_lib_facilities.h,以防您需要它来理解代码。
如您所见,main()
调用 for ,如果抛出异常(当读取无效令牌时发生)calculate()
,它又调用。然后从 Token_stream 中删除所有内容,直到找到print char (';'),所以我们可以继续下一个计算,希望不会包含另一个无效令牌。clean_up_mess()
clean_up_mess()
但是在异常处理完成后,程序就简单地终止了。我需要做什么才能恢复引发异常的地方?作者是否忘记解释这一点,或者我错过了什么?
谢谢。