下面的程序总是返回链接错误,请问如何解决?
#include <iostream.h>
template<class T> T compare_values(T a, T b)
{
return((a > b) ? a : b);
}
double compare_values(double a, double b);
int compare_values(int a, int b);
long compare_values(long a, long b);void main(void)
{
double a = 1.2345, b = 2.34567;
cout << "Comparing " << a << ' ' << b << ' ' << compare_values(a, b) << endl;
int c = 1, d = 100;
cout << "Comparing " << c << ' ' << d << ' ' << compare_values(c, d) << endl;
long e = 1010101L, f = 2020202L;
cout << "Comparing " << e << ' ' << f << ' ' << compare_values(e, f) << endl;
}
错误如下:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
1.cpp
Linking...
1.obj : error LNK2001: unresolved external symbol "long __cdecl compare_values(long,long)" (?compare_values@@YAJJJ@Z)
1.obj : error LNK2001: unresolved external symbol "int __cdecl compare_values(int,int)" (?compare_values@@YAHHH@Z)
1.obj : error LNK2001: unresolved external symbol "double __cdecl compare_values(double,double)" (?compare_values@@YANNN@Z)
Debug/test.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.test.exe - 4 error(s), 0 warning(s)

解决方案 »

  1.   

    老大!你以下几个函数
    double compare_values(double a, double b);
    int compare_values(int a, int b);
    long compare_values(long a, long b);怎么只有声明没实现啊?
      

  2.   

    这几个函数(compare_values)在上面的模板函数定义中已经实现了,这三句只是说明从上面的模板中生成这个三个函数
      

  3.   

    搂主想显式实例化
    应该这么写:
    template<double>
    double compare_values(double a, double b);
    template<int>
    int compare_values(int a, int b);
    template<long>
    long compare_values(long a, long b);
      

  4.   

    搂主想显式实例化
    应该这么写:
    template<double>
    double compare_values(double a, double b);
    template<int>
    int compare_values(int a, int b);
    template<long>
    long compare_values(long a, long b);
      

  5.   

    double compare_values(double a, double b);
    int compare_values(int a, int b);
    long compare_values(long a, long b);
    这几句不用要了。