c++ - 调用继承的方法 - 编译器错误

标签 c++ inheritance

我在调用继承方法时遇到问题。可能我错过了一些 virtualconst& 但我找不到位置

我有一个基类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

最佳答案

子类中的重载方法对基类隐藏了方法。您可以使用 using 声明修复它:

class MyClassifier : public Classifier {
public:
    using Classifier::classify;
    bool classify(const Image& ii, const rect_t& rect) const;
};

关于c++ - 调用继承的方法 - 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572311/

相关文章:

c++ - 在 C 和 C++ 中通过 index[array] 访问数组

c++ - 扩展公共(public)基础 : Diamond inheritance vs. QObject

c++ - 使用共享指针 vector 并按排序函数问题对指针对象进行排序

c++ - 由于进程退出期间的静态变量清理,c++ STL 映射中的段错误查找

c++ - 关于构造函数调用和继承顺序的一些困惑

C++ 可以有条件地向下转换类指针吗?

java - 重写方法是 super 引用父类(super class) super

C++ pow() 函数在放入函数时会改变行为

c++ - 使虚拟的实现也虚拟?

symfony - 使用 Doctrine 将实体与不同的子类合并