2014-03-04 17 views
0

我確定這是簡單的,但無法找到明確指出這一點的任何其他帖子,儘管我確定必須有一個被埋在某處。當在C++中拋出一個錯誤時附加一個字符串

在C++中,當以下面的方式使用try catch塊時,如何在錯誤消息中附加一個字符串變量?

嘗試這樣做時出現未處理的異常。是否與傳回的類型有關?似乎是返回一個字符串與char *。如果這是正確的,會導致問題嗎?我該如何調整呢?我試着添加一個額外的catch(const string my_msg),但那也不起作用。

string msg = "message"; 
try{ 
    if (...) 
     throw "My error " + msg; 
    } 
catch (const char* my_msg){ 
    cerr << my_msg << endl; 
} 

回答

2

"My error " + msgoperation that concatenates一個const char*字符串和一個std::string。該操作產生std::string類型的臨時變量。因此,必須使用std::string類型的catch子句捕獲拋出的變量。

catch (const std::string& my_msg){ 
    cerr << my_msg << endl; 
} 

不過,最好的做法是讓您的例外來自std::exception。不過,您不需要創建自己的異常類,因爲及其派生類提供了有用的常見運行時異常分類。

在很多情況下,您需要針對您的例外有不同的類型,通常可能是項目或域特定的。在C++ 11,讓自己的異常類型是那麼容易,因爲這

struct my_exception : std::runtime_exception { 
    using std::runtime_exception::runtime_exception; // Inherit runtime_exception's constructors 
}; 

它使用C++ 11的inheriting constructors

相關問題