在GCC上编译时,我得到了错误:函数定义上的纯说明符,但是当我使用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这个错误意味着什么?为什么我不能内联呢?如第二个代码示例所示,回避编译问题是否合法?
发布于 2010-06-01 15:58:57
好吧,我刚学到了一些东西。必须按照以下方式声明纯虚拟函数:
class Abstract
{
public:
virtual void pure_virtual() = 0;
};它可能有一个机构,尽管在宣布时将其包括在内是非法的。这意味着要拥有一个主体,必须在类之外定义纯虚拟函数。注意,即使它有一个主体,函数仍然必须被从Abstract派生的任何具体类覆盖。如果需要的话,他们可以选择显式调用Abstract::pure_virtual()。
细节是这里。
发布于 2010-06-01 16:03:16
C++标准,10.4/2:
函数声明不能同时提供纯说明符和定义。
发布于 2010-06-01 16:00:10
这个语法:
virtual void Process() = 0 {};不是合法的C++,而是由VC++支持的。为什么标准不允许这一点对我来说从来都不是显而易见的。你的第二个例子是合法的。
https://stackoverflow.com/questions/2951273
复制相似问题