2013-04-01 143 views
0

是否有可能在C++中有一個異常類中的多個元素,我可以將它與異常相關聯,這樣當我拋出它時,用戶可以收集有關異常的更多信息而不僅僅是一條錯誤消息?我有以下類異常繼承

#include <list> 
using namespace std; 

class myex : public out_of_range { 
private: 
    list<int> *li; 
    const char* str = ""; 
public: 
    //myex(const char* err): out_of_range(err) {} 
    myex(li<int> *l,const char* s) : li(l),str(s) {} 

    const char* what(){ 
     return str; 
    }  
}; 

當我把使用

throw myexception<int>(0,cont,"Invalid dereferencing: The iterator index is out of range.");, 

當我取消對註釋行我得到一個錯誤

error: no matching function for call to ‘std::out_of_range::out_of_range()’. 
Any help is appreciated.`. 

一個MYEX,並刪除其他的構造函數,然後它工作正常。

+0

保存'const char *'在這裏是非常危險的,因爲用來構造異常的字符串很可能超出了拋出和異常捕獲之間的範圍。 –

+0

感謝您的諮詢! – rgamber

回答

2

您用戶定義的異常的構造函數嘗試調用類out_of_range的默認構造函數... Except it doesn't exist

關於註釋的構造函數:

myex(const char* err): out_of_range(err) {} 
        //^^^^^^^^^^^^^^^^^ this calls the constructor of 
        // out_of_range with the parameter err. 

爲了解決當前的構造函數,你應該添加到out_of_range的構造函數的顯式調用(這需要一個常量字符串&):

myex(li<int> *l,const char* s) : out_of_range(s), li(l),str(s) {} 
+0

謝謝。它現在起作用了,在我繼承它之後錯過out_of_range()構造函數是愚蠢的。 – rgamber