編輯:本書沒有錯,我只是沒有正確複製它提供的代碼。 try-catch
塊應該放在while循環中,而我把它放在它之外。Stroustrup使用C++的PPP:第7章第7節(「從錯誤中恢復」)
也有一些是我可能會丟失約Stroutrup的「編程:原理與實踐使用C++」,在第7章,第7節(「從錯誤中恢復」)。我希望讀過這本書的人能夠幫助我(或者任何人,實際上!)。
我們開發了一個帶有令牌解析器的計算器。當程序讀取一個無效標記時,它就會終止。第7部分的目標是使計算器從這種錯誤中恢復而不終止。我的問題是,在遵循書中的指示後,計算器仍會在無效標記後終止。
Here是計算器的完整代碼。 Here是std_lib_facilities.h,以防你需要它來理解代碼。
正如你所看到的,main()
要求calculate()
,如果拋出異常(這發生在讀取無效令牌時發生),則calculate()
又調用clean_up_mess()
。 clean_up_mess()
然後刪除Token_stream中的所有內容,直到找到print char(';'),因此我們可以繼續進行下一次計算,希望它不會包含另一個無效令牌。
但是,異常處理完成後,程序簡單地終止。我需要做些什麼來恢復拋出異常的位置?作者忘了解釋這個,還是我錯過了什麼?
謝謝。
備註:確保你真的想要異常[在你開始使用它之前](http://stackoverflow.com/q/1744070/912144)。 – Shahbaz 2012-07-15 23:00:52