c++ - 函数定义上的纯说明符

标签 c++ abstract-class pure-virtual

在 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/

相关文章:

c++ - 如何使用 boost.log 写入文件?

c++ - 如何检查位域是否跨越所有位

c++ - 如果从析构函数调用纯虚函数是UB,为什么我们可以使用纯虚析构函数?

php - php中抽象和接口(interface)有什么区别?

android - 在派生 Activity 的 onCreate 之后调用抽象 Activity 中的方法

c++ - 抽象类型可以用作纯虚函数的返回类型吗?

c++ - 派生纯虚函数的实现

c++ - 为什么在 `template` 类的枚举上使用声明不起作用?

java - 将 Java 嵌入到 C++ 应用程序中?

java - Java 中的通用返回类型