我在调用继承方法时遇到问题。可能我会遗漏一些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...
}
主叫代码是:
// main...
MyClassifier c;
Image some_image;
c.classify(some_image);
错误:
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
答案 0 :(得分:5)
子类中的重载方法将方法隐藏在基类中。您可以使用using
声明来修复它:
class MyClassifier : public Classifier {
public:
using Classifier::classify;
bool classify(const Image& ii, const rect_t& rect) const;
};
答案 1 :(得分:3)
您可以在BjörnPollex的答案中添加using
声明,也可以在呼叫站点添加显式限定符:
c.Classifier::classify(some_image);
答案 2 :(得分:0)
您必须使用范围运算符来明确指示您正在尝试调用函数的基类版本而不是当前的类版本。