상속 된 메서드를 호출하는 데 문제가 있습니다. 아마 좀 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
@SethCarnegie : 예. 권리. –
유일하게 신경 쓰이는 것은 각 상속 된 클래스에 대해 2- 매개 변수 버전을 호출하는 1- 매개 변수'classify'를 갖는 것입니다. 나를 위해 그것이'가상'의 유무에 관계없이있을 수 있습니다. 'vtable'성능 패널티를 얻지 못해서 더 좋지 않다. –