调用继承方法 - 编译错误

Jak*_* M. 1 c++ inheritance

我有一个调用继承方法的问题.可能我想念一些virtual,const或者&我找不到哪里

我有一个基类Classifier,一个"真实"和一个虚函数,"真实"函数调用虚拟函数.子类MyClassifier定义虚拟继承的方法.现在当我在MyClassifier对象上调用"真正的"类时,我遇到了编译器错误.

class Classifier {
    public:
    bool classify(const Image& ii) 
    { 
        return classify(ii, ii.getRect()); 
    }

    virtual bool classify(const Image& ii, const rect_t& rect) const = 0;
};

class MyClassifier : public Classifier {
    public:
    bool classify(const Image& ii, const rect_t& rect) const;
};

bool
MyClassifier::classify(const Image& ii, const rect_t& rect) const
{
    // do stuff...
}
Run Code Online (Sandbox Code Playgroud)

调用代码是:

// main...
MyClassifier c;
Image some_image;

c.classify(some_image);
Run Code Online (Sandbox Code Playgroud)

而错误:

error: no matching function for call to ‘MyClassifier::classify(const Image&) const’
note: candidate is:
note: virtual bool MyClassifier::classify(const Image&, const rect_t&) const
note:   candidate expects 2 arguments, 1 provided
Run Code Online (Sandbox Code Playgroud)

Bjö*_*lex 5

子类中的重载方法将方法隐藏在基类中.您可以使用using-declaration 修复它:

class MyClassifier : public Classifier {
public:
    using Classifier::classify;
    bool classify(const Image& ii, const rect_t& rect) const;
};
Run Code Online (Sandbox Code Playgroud)