我具有以下类结构:

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


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

最佳答案

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

using MyBase::exportData;


使此函数对子类显式可见。

Live Example

关于c++ - 在子类中未检测到C++纯虚函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15334928/

10-15 01:29