首页 > 解决方案 > 为什么找不到函数重载?

问题描述

对不起,如果这是一个重复或愚蠢的问题。

但我无法编译以下 c++ 代码;(VS2017 更新 15.7.5)

class IInterface
{
public:
  virtual void FnX(int) = 0;
  virtual void FnX(int, int) = 0;
  virtual void FnY(int) = 0;
};

class CClassBase : public IInterface
{
public:
  virtual void FnX(int) override {}
  virtual void FnX(int, int) override final {}
  virtual void FnY(int) override final {}
};

class CClassX : public CClassBase
{
public:
  virtual void FnX(int) override {}
};

void Foo()
{
  CClassX x;
  x.FnY(1);
  x.FnX(2);
  static_cast<CClassBase &>(x).FnX(3, 4);
  static_cast<IInterface &>(x).FnX(5, 6);
  x.FnX(7, 8);
}

最后一行x.FnX(7, 8);不编译。编译错误:

错误 C2660:“CClassX::FnX”:函数不接受 2 个参数

谁能解释一下,为什么它不编译?FnX(int, int)或为什么找不到函数重载?

标签: c++inheritancefinaloverloading

解决方案


推荐阅读