功能模板过载问题

时间:2013-10-23 06:14:21

标签: c++

为什么我收到错误说:

  1. 错误C2668:'max':对重载函数的模糊调用
  2. 错误C2780:'const T& max(const T&,const T&,const T&)':需要3个参数 - 提供2个。
  3. 在以下代码中:

    template<typename T>
    inline T const& max(T const& i, T const& j)
    {
      cout<<"Using template with 2 args."<<endl;
      return (i>j) ? i : j;
    }
    
    template<typename T>
    inline T const& max(T const& i, T const& j, T const& k)
    {
      cout<<"Using template with 3 args."<<endl;
      return max(max(i,j),k);
    }
    
    void main()
    {
      cout<< ::max(1,2,3)<<endl;    
    }
    

    我在调用之前已经定义了2参数模板函数。

1 个答案:

答案 0 :(得分:2)

删除using namespace std,因为有std::max参与搜索,这就是为什么会出现第一个错误。第二个错误简单地说,有明确的变体,但它们应该得到3个args。