2011-11-13 43 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") 
    { 
    } 
};