【问题标题】:Accessing member parent function to child访问成员父函数给孩子
【发布时间】:2018-09-24 17:59:28
【问题描述】:

问题是我有一个排序父类(排序器)和许多子类(合并、冒泡、快速)

我要做的是访问父类中的函数“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

但我在 main 行中遇到错误

Sorter::runOnce(bubble, list);

上面写着:

没有匹配函数调用'sorter:: runOnce(Sorter*&, std:: vector > &)

我试着把它改成

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

它说

Sorter的使用无效::Sorter

我该如何解决这个问题?

【问题讨论】:

  • 如果要调用runOnce(bubble, list); runOnce 必须是静态函数

标签: c++ function inheritance


【解决方案1】:

该函数采用Sorter&amp;,而不是Sorter*&amp;。传入时取消引用指针,例如: Sorter&lt;int&gt;::runOnce(*bubble, list);

【讨论】:

  • 它说不能在没有对象的情况下调用成员函数'double Sorter ::runOnce (Sorter&,std::vector&) (with T= int)'跨度>
  • 通过对象 (bubble-&gt;runOnce(*bubble, list);) 调用它或将runOnce 设为静态以便可以通过类调用它。
【解决方案2】:

我通过在 main 中将 runOnce 作为一个函数并调用它来解决它,它解决了所有问题。另外我在子类中使用了父类的头文件,因为我使用的是cpp文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2012-10-08
    • 2021-07-19
    • 2019-09-01
    • 2014-01-24
    相关资源
    最近更新 更多