首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-08 
关于函数模板和非函数模板#includeiostreamtemplateclassTTmax(Tx,Ty){return((x y)?x:y)}voidmain(

关于函数模板和非函数模板
#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) "呢?


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


楼主用啥编译器啊?偶用VC2005,没问题。
[解决办法]
#include <iostream>

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

double max(double x, double y){

double b = 0;

b = ((x> y)?x:y);

std::cout < < "Hello " < <std::endl;

return b;
}


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;
std::cout < <max <> (b,c) < <std::endl;

}

VS 2003 运行结果
2
3
3

没有 hello

热点排行