关于函数模板和非函数模板解决思路

关于函数模板和非函数模板
#include   <iostream>

    template       <class       T>      
    T       max(T       x,T       y)      
    {
    return       ((x> y)?x:y);
    }      
       
    void       main()      
    {       int       a=1;      
            double       b=2;      
      double   c   =   3;
      double   d   =   3.3;
      double   e   =   5.0;
      std::cout < <max <int> (a,b) < <std::endl;      

      std::cout < <max <double> (b,c) < <std::endl;
  }      

上面的程序可以正常运行,但是下面的程序确出现问题:

#include   <iostream>

    template       <class       T>      
    T       max(T       x,T       y)      
    {
    return       ((x> y)?x:y);
    }      
       
    double       max(double,double);
//
  //   double   max(double   x,double   y)
  //   {
  //     return   (   (x   >   y)   ?   x   :   y);
  //   }

    void       main()      
    {       int       a=1;      
            double       b=2;      
      double   c   =   3;
      double   d   =   3.3;
      double   e   =   5.0;
      std::cout < <max <int> (a,b) < <std::endl;      

      std::cout < <max <double> (b,c) < <std::endl;
      /*
      template.obj   :   error   LNK2001:   unresolved   external   symbol   "double   __cdecl   max(double,double) "   (?max@@YANNN@Z)
Debug/template.exe   :   fatal   error   LNK1120:   1   unresolved   externals
  */

      std::cout < <max <> (b,c) < <std::endl;
      /*
      template.obj   :   error   LNK2001:   unresolved   external   symbol   "double   __cdecl   max(double,double) "   (?max@@YANNN@Z)
Debug/template.exe   :   fatal   error   LNK1120:   1   unresolved   externals
  */

  }      

虽然我声明了     double       max(double,double);但是我在写std::cout < <max <double> (b,c) < <std::endl;或者max <> (b,c)时已经明确指出使用模板的,为什么还会调用double   __cdecl   max(double,double) "呢?


------解决方案--------------------