C ++重载异常的构造函数

排骨汉

我尝试做出自己的例外,即可以使用一个或两个参数抛出该异常。所以我要做的就是重载异常的构造函数。但是,似乎没有调用第二个构造函数。这是我的代码:

代码清单1。

class myException: public std::exception {
public:
    /*
     * first constructor
     */
    myException(unsigned short ExceptionCode):exception(){
        code = ExceptionCode;
        errorMessage = std::string("");
    }
    /*
     * second constructor
     */
    myException(unsigned short ExceptionCode, std::string errorMessage):exception(){
        std::cout << "debugging message";//present here for debugging purpose only
        code = ExceptionCode;
        this->errorMessage = errorMessage;
    }

    const char * what() const throw ()
    {   
        std::string tmp;
        switch(code){
            case MYERROR_CODE_1:
                tmp = std::string("MYERROR_CODE_1 : ");
                if(errorMessage.empty())
                    tmp += std::string("this is a default error message for code 1");
                tmp += errorMessage;
                break;
            case MYERROR_CODE_2:
                tmp = std::string("MYERROR_CODE_2 : ");
                if(errorMessage.empty())
                    tmp += std::string("this is a default error message for code 2");
                tmp += errorMessage;
        }


      return tmp.c_str();
    }
    ~myException() throw(){}

private:
    std::string errorMessage;
    unsigned short   code;
};

例如,当我这样称呼它时:

代码清单2。

void myFunction(myClass myObject){
    //some code
    if(conditionsMeet)
         throw myException(MYERROR_CODE_2,"this is a more specific custom message for code 2");
    //some other code
}

“调试消息”根本没有出现。当我评论“第一个构造函数”时,我得到一个错误和很多警告。

错误清单1。

main.cpp:28:41: error: no matching function for call to 'myException::myException(ExceptionCode)'
     throw myException(MYERROR_CODE_2);
                                         ^
main.cpp:28:41: note: candidates are:
In file included from Node.h:12:0,
                 from main.cpp:10:
myException.h:50:5: note: myException::myException(short unsigned int, std::string)
     myException(unsigned short ExceptionCode, std::string errorMessage):exception(){
     ^
myException.h:50:5: note:   candidate expects 2 arguments, 1 provided
myException.h:44:7: note: myException::myException(const myException&)
 class myException: public std::exception {
       ^
myException.h:44:7: note:   no known conversion for argument 1 from 'ExceptionCode' to 'const myException&'

编辑:错误代码定义如下:

代码清单2。

enum ExceptionCode{
    MYERROR_CODE_1                 = 1,
    MYERROR_CODE_2                 = 2,
};

谁能向我解释我做错了什么,为什么?提前致谢。

扬·库卡卡(Jan Kukacka)

正如Massa所指出的,由于示例行而不会引发您得到的编译错误:

throw myException(MYERROR_CODE_2,"this is a more specific custom message for code 2");

而是因为您在代码的其他位置调用了第一个构造函数,例如:

throw myException(MYERROR_CODE_2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用move构造函数引发异常?(C ++)

来自分类Dev

C ++在构造函数中捕获异常

来自分类Dev

C ++模板函数的重载

来自分类Dev

堆栈对象的C ++构造函数异常处理

来自分类Dev

调用构造函数时异常的C ++行为

来自分类Dev

我可以在C#中调用相同类的重载构造函数吗?

来自分类Dev

构造函数<X,Y>(C <Y>)和接口C <Y>的Java泛型异常行为

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

C ++类构造函数引发异常

来自分类Dev

新的类型/类和朋友的C ++重载构造函数

来自分类Dev

重载递归函数C ++

来自分类Dev

重载的构造函数c#

来自分类Dev

编译器无法识别重载的构造函数C ++

来自分类Dev

C + +成员函数重载&(&)

来自分类Dev

C ++类模板构造函数-数组(U *)的重载引用(U&)失败

来自分类Dev

C#构造函数重载:new object.FromOtherObject()?

来自分类Dev

c ++:函数不能重载

来自分类Dev

C ++编译错误:无法从B转换为A,没有构造函数,或者构造函数重载模棱两可

来自分类Dev

调用重载的构造函数会产生歧义错误C ++

来自分类Dev

C ++ std :: shared_ptr,是否operator =重载以使用复制构造函数?

来自分类Dev

我们如何在C ++中从子类中调用父级重载的构造函数?

来自分类Dev

在C#中编写多个构造函数重载的最佳方法

来自分类Dev

C ++,处理构造函数的异常

来自分类Dev

C ++类:在没有构造函数重载的情况下初始化属性

来自分类Dev

使用cython从C ++构造函数传播异常

来自分类Dev

在重载的Java构造函数中抑制某些异常

来自分类Dev

C ++函数重载(函数多态)

来自分类Dev

用C ++重载构造函数动态分配对象

来自分类Dev

函数重载C ++指针

Related 相关文章

热门标签

归档