在 GCC 上编译时,我得到 error: pure-specifier on function-definition,但当我使用 VS2005 编译相同的代码时却没有。
class Dummy {
//error: pure-specifier on function-definition, VS2005 compiles
virtual void Process() = 0 {};
};
但是当这个纯虚函数的定义不是内联的时候,它就起作用了:
class Dummy
{
virtual void Process() = 0;
};
void Dummy::Process()
{} //compiles on both GCC and VS2005
错误是什么意思?为什么我不能内联?如第二个代码示例所示,逃避编译问题是否合法?
最佳答案
好的,我刚刚学到了一些东西。纯虚函数必须声明如下:
class Abstract
{
public:
virtual void pure_virtual() = 0;
};
它可能有一个主体,尽管在声明时包含它是非法的。这意味着要拥有一个主体,必须在类之外定义纯虚函数。请注意,即使它有一个主体,该函数仍然必须被从 Abstract
派生的任何具体类覆盖。如果需要,他们可以选择显式调用 Abstract::pure_virtual()
。
详情为here .
关于c++ - 函数定义上的纯说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951273/