访问成员父功能给孩子

时间:2018-04-14 15:04:51

标签: c++ function inheritance

问题是我有一个Sort父类(Sorter)和很多孩子(合并,泡泡,快速)

我要做的是访问父类中的函数“runOnce”。

Main.cpp的

int main()
{
    fstream Data;
    Data.open("Test.txt",ios::in|ios::out);

    Sorter<int>* bubble = new BubbleSort<int>;
      Sorter<int>* quick = new QuickSort<int> ;
    Sorter<int>* merge = new MergeSort<int> ;
    vector<int> list;
     while(!Data.eof())
    {
      int temp; 
     Data >> temp;
      list.push_back(temp);
    }
    Sorter<int>::runOnce(bubble, list);
    Data.close();
}

Sorter.cpp

#ifndef SORTER_H
#define SORTER_H
#include <vector>
using namespace std;

template <class T>
class Sorter {
    public:
        Sorter(){};
        virtual void sort(vector<T>&, int, int) = 0;
        double runOnce(Sorter<T>&, vector<T>&);

};

#endif // SORTER_H

但我在主要的

中遇到错误
  

Sorter :: runOnce(bubble,list);

它说:

  

没有匹配函数来调用'sorter ::   runOnce(Sorter *&amp;,std :: vector&lt; int,std :: allocator&lt; int&gt;&gt;&amp;)

我试图将其改为

bubble->Sorter->runOnce(bubble, list);

它说

  

无效使用分拣机&lt; int&gt; :: Sorter

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

该功能需要Sorter&,而不是Sorter*&。传入指针时取消引用指针,例如: Sorter<int>::runOnce(*bubble, list);

答案 1 :(得分:0)

我解决了这个问题,让runOnce成为main中的一个函数并调用它,它解决了所有问题。我还使用了子类中父类的头文件,因为我使用的是cpp文件。