小编Jus*_*sad的帖子

当派生类方法不可行时,为什么 C++ 重载决策不查看基类方法?

编译失败的例子:

class A{
 public:
  int f(int a) {return a;}
};

class B: public A {
 public:
  int f(int a, int b) {return a + b;}
};

int calculation(int num) {
    B b;
    return b.f(num);
}
Run Code Online (Sandbox Code Playgroud)

在调用站点b.f(num)gcc给出以下错误消息:

错误:没有匹配的函数可供调用B::f(int&)

基类有一个可行的候选者,但由于某种原因编译器不会考虑它。

如果我将调用重写为b.A::f(num),那么它就可以正常工作。我不明白为什么这A::是必要的。为什么 的A::f重载解析逻辑不将其视为可行的候选者b.f

c++ inheritance overload-resolution

5
推荐指数
2
解决办法
369
查看次数

标签 统计

c++ ×1

inheritance ×1

overload-resolution ×1