【问题标题】:Why do I get no matching function when I inherit this function [duplicate]为什么我继承这个函数时没有得到匹配的函数[重复]
【发布时间】:2011-05-15 08:22:37
【问题描述】:

可能重复:
overloaded functions are hidden in derived class

我有 A 类和 B 类(A 的子类)

A类有功能

virtual void foo(int, int);
virtual void foo(int, int, int);

当我尝试做时

B类功能

virtual void foo(int, int);

当我尝试使用类调用 foo(int, int, int) 时,编译器不会让我这样做,因为它说

no matching function for foo(int,int,int)
candidate is foo(int,int);

【问题讨论】:

标签: c++ inheritance


【解决方案1】:

原因与 C++ 进行名称查找和重载解析的方式有关。 C++ 将从表达式类型开始向上查找,直到找到与指定名称匹配的成员。然后它将只考虑在发现的类型中具有该名称的成员的重载。因此,在这种情况下,它只考虑在B 中声明的foo 方法,因此无法找到重载。

最简单的补救方法是将using A::foo 添加到class B 以强制编译器也考虑这些重载。

class B : public A {
  using A::foo;
  virtual void foo(int, int);  
};

【讨论】:

    【解决方案2】:

    类 B 中的覆盖隐藏了类 A 的同名方法。 (你有编译器警告吗?大多数编译器警告隐藏的虚拟方法。)

    为避免这种情况,请添加

    using A::foo;
    

    到 B 类(在任何适合的 public/protected/private 部分)。

    【讨论】:

      【解决方案3】:

      使用

      B b;
      b.A::foo(1,2,3);
      

      例如。

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多