异常继承

时间:2013-04-01 05:42:53

标签: c++ exception inheritance

是否可以在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;
    }       
};

当我使用

抛出myex时
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.`.

当我取消注释注释行并删除其他构造函数时,它可以正常工作。

1 个答案:

答案 0 :(得分: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的构造函数的显式调用(它带有一个const字符串&amp;):

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