函数定义的纯粹说明符

Béb*_*bul 34 c++ abstract-class pure-virtual

在GCC上编译时,我得到错误:函数定义上的纯指定符,但是当我使用VS2005编译相同的代码时却没有.

class Dummy {   
  //error: pure-specifier on function-definition, VS2005 compiles 
  virtual void Process() = 0 {};
};
Run Code Online (Sandbox Code Playgroud)

但是当这个纯虚函数的定义不是内联时,它的工作原理是:

class Dummy
{
  virtual void Process() = 0;
};
void Dummy::Process()
{} //compiles on both GCC and VS2005
Run Code Online (Sandbox Code Playgroud)

错误意味着什么?为什么我不能内联?如第二个代码示例所示,避免编译问题是否合法?

Dim*_*ima 31

好的,我刚刚学到了一些东西.纯虚函数必须声明如下:


class Abstract 
{
public:
   virtual void pure_virtual() = 0;
};
Run Code Online (Sandbox Code Playgroud)

它可能有一个机构,但在声明时包含它是非法的.这意味着要拥有一个正文,必须在类之外定义纯虚函数.请注意,即使它有一个主体,该函数仍必须被派生自的任何具体类所覆盖Abstract.Abstract::pure_virtual()如果需要,他们可以选择明确调用.

细节在这里.

  • 是的,如果你需要,应该.拥有一个是完全合法的. (2认同)

Pau*_*aul 19

C++标准,10.4/2:

函数声明不能​​同时提供纯指定符和定义


小智 12

这个语法:

virtual void Process() = 0 {};
Run Code Online (Sandbox Code Playgroud)

不是合法的C++,但VC++支持.究竟为什么标准不允许这一点对我来说从未如此明显.你的第二个例子是合法的.