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

Nad*_*ern 0 c++ exception

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

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

在我发送一些函数之前我的代码正在编写

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

在func里面,我抛出一个异常,但没有任何东西可以抓住它.在此先感谢您的帮助.

Mar*_*ork 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.
    }
}
Run Code Online (Sandbox Code Playgroud)