2011-11-13 68 views
0

我想用繼承來創建一個派生自runtime_error的類,但是我仍然收到一個錯誤,即使這是練習中使用的確切代碼並且是本書的一個示例。這裏是代碼:runtime_error期待一個「;」?

class DivideZeroEx : public runtime_error 
{ 
    public: 
     DivideZeroEx() 
      runtime_error(" attempt to divide by zero") 
}; 

現在我收到一個錯誤,指出它期望一個;在runtime_error(「嘗試除以零」)行之前。

+0

在C/C++中,您必須用分號結束語句。你確定你沒有錯過他們? –

回答

9

調用基類的構造函數的語法應爲:

DivideZeroEx() : runtime_error(" attempt to divide by zero") { } 
+0

感謝您的幫助!我得到了它應該的工作。那麼,我還有哪些其他類型的原因可以使用這些類型的runtime_error捕獲? –

+0

我不完全相信我明白你在問什麼,但我會說你可以爲每個你需要的不同的異常創建一個派生類,如果有必要的話,可能按類別對它們進行分組(如使用另一層繼承) 。看看[this](http://www.cplusplus.com/reference/std/stdexcept/runtime_error/)和[this](http://stackoverflow.com/questions/688447/best-practices-for-定義你自己的例外類)來獲得更多信息。 – Vlad

7

您試圖調用基類的構造函數成員初始化列表,語法爲:

DivideZeroEx():runtime_error(" attempt to divide by zero") 
{ 
} 
+0

@Sjoerd完全廢話。爲什麼弗拉德的同樣答案很重要,而這一個是低調的? –

1
class DivideZeroEx : public runtime_error 
{ 
public: 
    DivideZeroEx() : runtime_error(" attempt to divide by zero") 
    { 
    } 

}; 
0

在這種情況下,它不會節省很多,但是如果您在整個班級中通過名稱使用runtime_error,那麼在未來更換基地會更容易。

class DivideZeroEx : public runtime_error 
{ 
typedef runtime_error base; 

public: 
    DivideZeroEx() : base(" attempt to divide by zero") 
    { 
    } 
};