如何在C ++程序中使用Exceptions?

时间:2010-09-22 08:33:23

标签: c++ exception

嘿,我试图继承异常类并创建一个名为NonExistingException的新类: 我在我的h文件中写了以下代码:

class NonExistingException : public exception
{
public:
    virtual const char* what() const throw()  {return "Exception: could not find 
     Item";}
};

在我的代码中之前我正在向我正在编写的函数发送内容

try{
    func(); // func is a function inside another class
}
catch(NonExistingException& e)
{
    cout<<e.what()<<endl;
}
catch (exception& e)
{
     cout<<e.what()<<endl;
}

在func中我抛出异常但没有任何东西捕获它。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

我会这样做:

// Derive from std::runtime_error rather than std::exception
// runtime_error's constructor can take a string as parameter
// the standard's compliant version of std::exception can not
// (though some compiler provide a non standard constructor).
//
class NonExistingVehicleException : public std::runtime_error
{
    public:
       NonExistingVehicleException()
         :std::runtime_error("Exception: could not find Item") {}
};

int main()
{
    try
    {
        throw NonExistingVehicleException();
    }
    // Prefer to catch by const reference.
    catch(NonExistingVehicleException const& e)
    {
        std::cout << "NonExistingVehicleException: " << e.what() << std::endl;
    }
    // Try and catch all exceptions
    catch(std::exception const& e)
    {
        std::cout << "std::exception: " << e.what() << std::endl;
    }
    // If you miss any then ... will catch anything left over.
    catch(...)
    {
        std::cout << "Unknown exception: " << std::endl;
        // Re-Throw this one.
        // It was not handled so you want to make sure it is handled correctly by
        // the OS. So just allow the exception to keep propagating.
        throw;

        // Note: I would probably re-throw any exceptions from main
        //       That I did not explicitly handle and correct.
    }
}