0

我为我的程序做一个例外:

class PortNotDefined: public exception
{
public:

const char* what() const throw()
{
    return "Puerto no definido o no disponible";
}
} PortNotDefined;

后来,我使用了这样的 try-catch 块:

try{.....}
catch(const char* a){
    std::string error(a);
    ...
}

但它没有捕获异常,我不知道我是否很好地定义了异常或者是 try-catch 中的问题

谢谢你的时间^^

4

3 回答 3

3

首先,您的异常是 PortNotDefined 类型,因此您应该使用catch(const PortNotDefined& d)而不是 catch(const char* a) 来捕获。返回 const char* 不会使其成为 const char* 异常。

其次,在你的 try 块中需要抛出 PortNotDefined。否则,该异常将永远不会被捕获,因为它从未被抛出。

第三,我认为在声明异常类时出现语法错误。这是一个有效的完整示例:

class PortNotDefined: public exception
{
public:

    const char* what() const throw()
    {
        return "Puerto no definido o no disponible";
    }
};

void methodThatWillThrowPortNotDefined ()   
{
    throw PortNotDefined();
}

void test()
{
    try{
        methodThatWillThrowPortNotDefined();
    }
    catch(const PortNotDefined& pnd){
        std::string error(pnd.what());
        cerr << "Exception:" << error << endl;
    }
}
于 2013-08-09T10:34:36.277 回答
2

或者一般来说,由于继承层次结构,您可以将 const ref 捕获到 std::exception。

catch(const std::exception& ex)
于 2013-08-09T10:58:36.437 回答
1

catch(const char* a)将捕获一个类型的对象const char*。如果你抛出一个类型的对象,PortNotDefined你需要一个 catch 子句来捕获该类型,通常是catch(PortNotDefined d)or catch(const PortNotDefined& d)

于 2013-08-09T10:13:40.840 回答