对Base类中重载函数的模糊调用

时间:2014-03-05 04:33:38

标签: c++

我有一个带有重载函数的类A和带有重写函数的派生类。

class A
{
public:
    virtual void func1(float)
    {
        cout<<"A::func1(float) "<< endl;
    }
    void func1(int)
    {
        cout<<"A::func1(int) "<< endl;
    }
};

class B: public A
{
public:
    //using A::func1;

  void func1(float)
  {
      cout << " B::Func1(float)" << endl;
  }
};

int main()
{
    B obj;
    A obj1;

    obj.func1(10);
    obj1.func1(9.9);   // Getting error in call

    return 0;
}

错误C2668:'A :: func1':对重载函数的模糊调用

有人可以解释一下吗?

由于

1 个答案:

答案 0 :(得分:1)

值9.9可以转换为整数或浮点作为接口。因此,它发现了一个模糊性,即调用哪个函数:

您可以提及显式转换,例如:

obj1.func1((float)9.9);   

obj1.func1((int)9.9)

请考虑以下简单的测试代码:

#include <iostream>

using namespace std;


void test(int a)
{
  cout <<" integer "<<a<<endl;
};


void test(float a)
{
  cout <<"Float "<<a<<endl;
}

int main ()
{
   test(10.3);
}

尝试评论上面的任何一个函数,它将完美地工作,如果你引入这两个函数,就像你的代码一样,你会看到歧义。

希望这有点帮助;)。