2016-10-27 164 views
0

我想通過定義自己的構造函數和向用戶輸出自定義錯誤消息的print()方法來編寫繼承自基本異常類out_of_range的StrExcept異常類。自定義out_of_range異常

現在這是我的代碼:

class StrExcept: public out_of_range 
{ 
string message; 

public: 


StrExcept():out_of_range("The value entered is out of range"),message("The value entered is out of range"){}; 

void print(){ 
    cout << message; 
} 

}; 

內主要方法:

try 
{ 
    string str="My name"; 
    // the exception will be fired 
    str.substr(11,2); 
} 
// i want to catch it using this custom class 
catch (StrExcept &outOfRange) 
{ 
    // i want to print the error message using print method 
    outOfRange.print(); 

} 

但是,爲什麼不工作???和程序崩潰?

+0

首先,異常被const引用。 – DeiDei

回答

2

僅僅因爲你從一個類派生並不意味着已經存在的代碼(例如basic_string::substr的實現)將會使用它。該函數將拋出std::out_of_rangecatch(const StrExcept&)只會捕獲類型爲StrExcept的異常或從中派生的類,這不是拋出的異常。

+0

以及如何修復代碼? –

+1

你是什麼意思,「修復代碼」?如果你想'substr'拋出一個不同的異常,我想我已經明確表示你*不能那麼做*。你不能接受別人的代碼,並且讓它觸發你自己的異常類型。那麼你究竟想要這個代碼做什麼? –

+0

我的意思是我必須做'catch(out_of_range&outOfRange)',然後在catch塊中創建一個StrExcept對象並打印出消息? –