2016-11-08 41 views
-4
ebool keep_trying= true; 
do { 
    char fname[80]; // std::string is better 
    cout Image "Please enter the file name: "; 
    cin Image fname; 
    try { 
     A= read_matrix_file(fname); 
     ... 
     keep_trying= false; 
    } catch (cannot_open_file& e) { 
     cout Image "Could not open the file. Try another one!\n"; 
    } catch (...) 
     cout Image "Something is fishy here. Try another file!\n"; 
    } 
} while (keep_trying); 

此代碼從Discovering modern c++。我不明白「try-block」中的「A」和下一個catch-block中的「e」(cannot_open_file & e)異常在C++中如何工作?

+0

您是按順序閱讀本書嗎? – StoryTeller

+0

我懷疑這本書只是在沒有解釋概念的情況下拋出一段代碼。你讀到段落結尾了嗎? – user463035818

+0

實際上只有這個片段,沒有人可以知道'A'究竟是什麼,它是一些函數的返回值,它的定義你不會告訴我們(我非常肯定它可以在書中找到)。你可以問一下'x = foo()中'x'的含義;' – user463035818

回答

0

這似乎是一個不完整的代碼片段。你可以假設'A'是read_matrix_file()返回的任何類型。 'e'是對cannot_open_file類型的引用,它應該在代碼中的其他位置定義。

0
int read_matrix_file(const char* fname, ...) 
{ 
    fstream f(fname); 
    if (!f.is_open()) 
     return 1; 
     ... 
    return 0; 
} 

「A」是int read_matrix_file()函數的返回值。

struct cannot_open_file {}; 
void read_matrix_file(const char* fname, ...) 
{ 
    fstream f(fname); 
    if(!f.is_open()) 
    throw cannot_open_file{}; 
    ... 
} 

'e'是我們試圖捕捉的異常(拋出void read_matrix_file()函數)。基本代碼實際上。 感謝您的幫助StackOverflow!

所有代碼都來自「發現現代C++」。查看問題的鏈接。