【发布时间】:2011-09-21 22:46:09
【问题描述】:
当我们尝试delete virtual 方法时,错误消息似乎与场景有点误导。
prog.cpp:4:16: error: deleted function 'virtual void Test::foo()'
prog.cpp:8:2: error: used here
代码
struct Test : public Base
{
Test() {}
virtual void foo () = delete; // error
};
virtual 方法不是 deleteable 是否出于同样的原因,为什么它们不能在 C++03 中保持未实现?有没有办法提到Test 故意不实现virtual foo()?
【问题讨论】:
-
尝试将它们称为虚拟而不删除。
-
哇,我到现在还没有意识到你可以做到这一点。其次,它是否有帮助或有用?
-
@DumbCoder:嗯,你不能。你得到一个错误。因此提出了这个问题。
-
如果我们应该被允许调用
(Base*)->foo(),而Base*可以是Test*,那么我们怎么能让Test既不实现foo也不抽象呢?从必须存在的派生类中删除一个函数有什么意义? -
@Tomalak Geret'kal - 我更想知道它有多大帮助,你会在哪里使用它?应该说清楚。可能会去看看标准文档。