下面的程序总是返回链接错误,请问如何解决?
#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)
#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)
double compare_values(double a, double b);
int compare_values(int a, int b);
long compare_values(long a, long b);怎么只有声明没实现啊?
应该这么写:
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);
应该这么写:
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);
int compare_values(int a, int b);
long compare_values(long a, long b);
这几句不用要了。