2012-10-02 52 views
0

請你檢查這個代碼嗎? try/catch/throw有什麼問題?在C++中try/throw/catch:我的代碼有什麼問題?

#include<iostream> 
using namespace std; 

int get_input(); 

int main() { 

    int number, base_in, base_out; 
    bool pass = 1; 

    while(pass) { 

     double number, base_in, base_out; 

     try { 

      cout << "What's your number? "; 
      number = get_input(); 

      pass = 0; 

     } 
     catch(problem_type()) { 
      cout << "Please, write inputs should be integer" << endl; 
     } 

    } 

    return 0; 
} 


int get_input(bool target = 1) { 

    double n; 
    cin >> n; 

    if(n != (int)n) throw problem_type(); 

    if(target) { 
     if(n<1) throw problem_type(); 
    } 

    return (int)n; 

} 
+1

將catch(problem_type())'改爲catch(const problem_type&)' –

回答

3

按類型分類。像

catch(const problem_type&){ } 

也就是說,如果是類型。我沒有看到任何地方的定義...

+0

@SethCarnegie,增加了'const'。 –

+0

@SethCarnegie,我認爲如果它是非常量的,它可能會被複制?我不記得周圍的規定 - 這不是第一次:) –

+0

我不確定,我會看看如果我能找到它的東西。我只是認爲你不能將一個臨時變量綁定到一個非''const'引用,但是對於異常可能有一個例外。 –

0

當一個例外是拋出你會得到一個與有關異常的信息存儲對象......所以把它作爲catch(const Type& error)

爲什麼是它作爲一個參考,有必要?想想在某些情況下可能會出現的內存狀態,因此製作副本會增加併發症和處理時間,您可能會丟失重要信息。所以我們把它作爲參考。

只是'指向'原始數據。