継承されたメソッドの呼び出しに問題があります。おそらく私は、いくつかのvirtual
を欠場const
か&
が、私は一つの「本物」と1つの仮想関数で、基本クラスClassifier
を持っているところ継承されたメソッドの呼び出し - コンパイラエラー
私は見つけることができない、「本物」の機能は、仮想1を呼び出します。子クラス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
@SethCarnegie:はい。右。 –
私が気にしているのは、継承されたクラスごとに1パラメータの 'classify'呼び出しの2パラメータバージョンを持つことだけです。私にとって、それは「仮想」の有無にかかわらず可能です。私は 'vtable'のパフォーマンスペナルティを得られないので、さらに良くなくても –