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

重载的构造函数c#

来自分类Dev

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

来自分类Dev

C# 构造函数重载无用的括号

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

构造函数中的异常 - C++

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

通过参数C ++的类型专门研究重载的构造函数

来自分类Dev

C ++链表-构造函数和运算符重载

来自分类Dev

c#中构造函数重载和链接的区别

来自分类Dev

创建异常时构造函数语法上的差异(C ++)

来自分类Dev

如何从C ++中的构造函数中捕获异常

来自分类Dev

如何在C#中的构造函数中使用重载函数

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

热门标签

归档