关于函数模板和非函数模板解决思路
关于函数模板和非函数模板
#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) "呢?
------解决方案--------------------
#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) "呢?
------解决方案--------------------