我調用繼承方法時遇到問題。也許我錯過了一些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
@Jakub要真正使用C++的虛擬機制,你需要使用指針。 – MDman 2011-12-20 08:02:31
@SethCarnegie:是的。對。 – 2011-12-20 08:03:21
我唯一關心的是爲每個繼承類使用1參數'classify'調用tits 2參數版本。對我來說,它可以有或沒有'虛擬'。沒有更好的,因爲我不會得到'vtable'性能損失 – 2011-12-20 08:04:18