我有一个调用继承方法的问题.可能我想念一些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)
子类中的重载方法将方法隐藏在基类中.您可以使用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)