函数重载中的模糊错误

时间:2014-07-13 10:44:02

标签: c++ overloading

class overload                         
{                                      
  void func(int x)
   {
     cout<<"pass by value\n";
   }
  public:void func(int &x)
    {
      cout<<"pass by reference\n";  
    }
};
main()
   {
      overload b1; 
      b1.func(10);
   }

我已经将一个函数设为私有而另一个函数具有相同的名称public.now在main中只有一个函数是可见的,那么为什么编译器在我尝试访问此函数时会出现歧义错误?

2 个答案:

答案 0 :(得分:1)

在检查功能的访问权限之前执行过载分辨率。一个是private是无关紧要的 - 重载决议仍然是模棱两可的。

答案 1 :(得分:1)

在访问控制之前完成过载分辨率。编译器找到名为func()的所有函数,并尝试解析为最可行的重载。在那个阶段没有考虑到可见性。