2016-02-05 62 views
-3

我在創建簡單類異常時遇到問題。C++創建類異常

基本上,我不得不拋出一個異常,如果我在高爾夫球比賽成績的數是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; 
}; 

回答

1

通常你從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

你則拋出此異常,對於分數測試代碼。但是,通常在發生「特殊」情況時拋出異常,程序無法繼續進行,如無法寫入文件。當你可以很容易地糾正時,你不會拋出異常,例如當你驗證輸入時。

+0

這有助於!謝謝你,是的,我的任務需要我爲此創建一個類例外,我得到了一切主要完成和測試,再次非常感謝你 – blayrex

+0

@blayrex順便說一句,如果這裏的答案之一解決你的問題到你的滿意,你應該將來接受它,所以本網站的其他用戶可以看到問題已解決。 – vsoftco

1

人們通常從std::runtime_error繼承,而不是基於std::exception類型。它已經爲你實現了什麼()。

#include <stdexcept> 

class GolfError : public std::runtime_error 
{ 
public: 
    GolfError(const char* what) : runtime_error(what) {} 
}; 
+0

這是一個很好的觀點+1。在OP的情況下,我想這是要走的路。如果你想要更多的控制異常,那麼可能從'std :: exception'派生出來就更加靈活了。 – vsoftco