2013-04-01 189 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