0

在基类中,我有一个函数GetDetections,它接受一个字符串文件名,构造一个特性集,并将其工作推迟到一个纯虚函数GetDetections

在子类中,我实现了这个虚函数。

main中,我有一个子类的实例,并GetDetections使用文件名调用。我认为这会调用接受字符串参数的基类的非虚拟函数,但这不会编译。错误是:

prog.cpp:在函数'int main()'中:

prog.cpp:33:48: 错误: 没有匹配函数调用'SubClass::GetDetections(const char [13])'</p>

prog.cpp:33:48: 注意:候选人是:

prog.cpp:26:9: 注意: virtual int SubClass::GetDetections(const std::vector&) const prog.cpp:26:9: 注意: 参数 1 从 'const char [13]' 到 ' 没有已知的转换const std::vector&'</p>

这是代码。(也发布在http://ideone.com/85Afyx

#include <iostream>
#include <string>
#include <vector>

struct Feature {
  float x;
  float y;
  float value;
};

class BaseClass {
  public:
    int GetDetections(const std::string& filename) const {
        // Normally, I'd read in features from a file, but for this online
        // example, I'll just construct an feature set manually.
        std::vector<Feature> features;
        return GetDetections(features);
    };
    // Pure virtual function.
    virtual int GetDetections(const std::vector<Feature>& features) const = 0;
};

class SubClass : public BaseClass {
  public:
    // Giving the pure virtual function an implementation in this class.
    int GetDetections(const std::vector<Feature>& features) const {
        return 7;
    }
};

int main() {
    SubClass s;
    std::cout << s.GetDetections("testfile.txt");
}

我试过了:

  • 在子类中声明GetDetectionsint GetDetections, virtual int GetDetections
4

2 回答 2

3

在派生类中实现虚函数,隐藏GetDirections基类中的重载函数。

尝试这个:

using BaseClass::GetDetections;
int GetDetections(const std::vector<Feature>& features) const {
    return 7;
}

对于子类

于 2013-04-15T00:26:33.493 回答
0

重载的虚函数被隐藏。但是,您可以使用其限定名称调用BaseClasse'sGetDetections

std::cout << s.BaseClass::GetDetections("testfile.txt");
于 2013-04-15T00:24:30.530 回答