相关疑难解决方法(0)

C++成员函数虚拟覆盖和重载同时进行

如果我有这样的代码:

struct A {
  virtual void f(int) {}
  virtual void f(void*) {}
};

struct B : public A {
  void f(int) {}
};

struct C : public B {
  void f(void*) {}
};


int main() {
  C c;
  c.f(1);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出我正在尝试从int到void*进行无效转换.为什么编译器无法确定他必须调用B :: f,因为这两个函数都被声明为虚拟?


在阅读了jalf的回答后,我进一步减少了它.这个也行不通.不是很直观.

struct A {
  virtual void f(int) {}
};

struct B : public A {
  void f(void*) {}
};


int main() {
  B b;
  b.f(1);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual inheritance

29
推荐指数
1
解决办法
9919
查看次数

标签 统计

c++ ×1

inheritance ×1

polymorphism ×1

virtual ×1