【问题标题】:c++ create a class exceptionc++ 创建一个类异常
【发布时间】:2016-05-14 21:36:10
【问题描述】:

我无法创建一个简单的类异常。

基本上,如果我在高尔夫比赛中的得分为 0,我必须抛出异常,因为该方法会将得分减 1。

在这种情况下我将如何创建一个简单的异常类?

我当前的代码看起来像这样,但我卡住了,我删除了所有内容。

//looking for when score[i]=0 to send error message 
class GolfError:public exception{
  public:
    const char* what(){}
    GolfError(){}
    ~GolfError(void);

  private:
    string message;
};

【问题讨论】:

    标签: c++ class exception


    【解决方案1】:

    人们经常继承std::runtime_error,而不是基类std::exception。它已经为你实现了 what()。

    #include <stdexcept>
    
    class GolfError : public std::runtime_error
    {
    public:
        GolfError(const char* what) : runtime_error(what) {}
    };
    

    【讨论】:

    • 这点很好,+1。在 OPs 的情况下,我想这是要走的路。如果您想对异常进行更多控制,那么从std::exception 派生可能会更灵活。
    【解决方案2】:

    通常您从std::exception 派生并覆盖virtual const char* std::exception::what(),如下面的最小示例:

    #include <exception>
    #include <iostream>
    #include <string>
    
    class Exception : public std::exception
    {
        std::string _msg;
    public:
        Exception(const std::string& msg) : _msg(msg){}
    
        virtual const char* what() const noexcept override
        {
            return _msg.c_str();
        }
    }; 
    
    int main()
    {
        try
        {
            throw Exception("Something went wrong...\n");
        }
        catch(Exception& e)
        {
            std::cout << e.what() << std::endl;
        }
    }
    

    Live on Wandbox

    然后,您在测试分数的代码中抛出此异常。但是,每当发生“异常”并且程序无法继续进行时,您通常会抛出异常,例如无法写入文件。当您可以轻松纠正时,您不会抛出异常,例如当您验证输入时。

    【讨论】:

    • 这有帮助!谢谢!,是的,我的作业要求我为此创建一个类例外,我完成了其他所有工作并进行了测试,再次非常感谢您
    • @blayrex 顺便说一句,如果此处的某个答案对您的问题感到满意,您应该在以后接受它,以便该网站的其他用户看到问题已解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多