继承一个抛出的纯虚函数

Posted

技术标签:

【中文标题】继承一个抛出的纯虚函数【英文标题】:Inherit a pure virtual function that throws 【发布时间】:2016-03-02 22:36:24 【问题描述】:

正如标题所示,我想从抛出异常的类函数中创建一个继承的类函数。基类中的函数如下所示:

template <typename T>
class IQueue 
public:
virtual T dequeue()throw(…) = 0;

请注意,我不能修改它,因为它是针对班级的。我应该如何在被转移的类中声明函数?我试过这样:

template <typename T>
class Queue : public IQueue < T >
public:
virtual T dequeue()throw(…) 

但是我不允许运行它,它给了我指向基类中声明的错误。所以我在想我并没有像我应该的那样覆盖它。

这些是我得到的错误:

unexpected token(s) preceding ';'
syntax error : indentifier '...'
unable to recover from previous error(s); stopping compilation".

顶部的两个在 IQueue.h 中,最后一个在 xlocale 中。 我正在使用 Visual Studio 2013。

【问题讨论】:

"throw(…)" 我几乎不建议您在 C++ 中使用异常规范。它们不仅在某些平台上没有做任何有用的事情,不仅被弃用,而且在 C++17 中也被投票删除,除了空规范 (throw()) 你得到什么错误? @KABoissonneault,noexcept 更好throw() 是的,我们想看看错误信息。 问题可能是由于使用了Unicode Horizontal Ellipsis 字符吗? 【参考方案1】:

您的问题是由于使用了Unicode HORIZONTAL ELLIPSIS 字符 而不是...。然而,即使throw(...) 也没有在我的系统上编译。该类在其声明的末尾也缺少一个分号,但尚不清楚这是否只是上传到 Stack Overflow 时的一个错误。

您提到您从作业描述中复制了课程。无论从中复制什么,都不会正确格式化文本,这应该由教授/管理作业的人来解决。

另外,一般来说,使用异常规范在 C++ 中被视为 bad idea。

【讨论】:

是的,就是这样,我把它改成了三个点“...”,现在它工作正常。非常感谢:) @Adam 很高兴为您提供帮助。如果某个答案解决了您的问题,您可以通过单击该问题的投票箭头下方的复选标记将其标记为解决方案。

以上是关于继承一个抛出的纯虚函数的主要内容,如果未能解决你的问题,请参考以下文章

C++的纯虚函数实现和头文件

具有相同名称的纯虚函数的不同实现[重复]

多态—— 纯虚函数和抽象类

带有实现的纯虚函数

为啥我们需要 C++ 中的纯虚析构函数?

在这种情况下,我可以避免使用身体的纯虚函数吗