C ++在子类中未检测到纯虚函数

时间:2013-03-11 09:22:56

标签: c++ inheritance g++ pure-virtual

我有以下类结构:

class MyBase
{
   public:
      virtual ExportData exportData() = 0;
      virtual bool exportData(QString filepath)
      {
         ExportData data = exportData();
         data.save(filepath);
      }
};

class MyClass : public MyBase
{
   public:
      virtual ExportData exportData(){//some implementation}
};

class MySubClass : public MyClass
{
   public:
      virtual ExportData exportData(){//some implementation}
};

然后我按如下方式导出数据:

MySubClass *sub = new MySubClass();
sub->exportData("/home/me/export.xml");

尝试使用g ++编译时,出现以下错误:

error: no matching function for call to ‘MySubClass::exportData(QString)’
note: candidate is: virtual ExportData MySubClass::exportData()
note:   candidate expects 0 arguments, 1 provided

我没有看到我做错了什么,为什么会这样?

2 个答案:

答案 0 :(得分:3)

我怀疑你的第一个虚函数隐藏了你的第二个函数,你应该在子类中执行此操作:

using MyBase::exportData;

使您的子类明确可见此函数。

Live Example

答案 1 :(得分:1)

virtual ExportData exportData()中声明MySubClass,您隐藏了virtual bool exportData(QString filepath)。您需要使用using声明将其带入范围:

class MySubClass : public MyClass
{
   public:
      using MyBase::exportData;
      virtual ExportData exportData(){//some implementation}
};