我不知道这是否有所作为,但我使用的是VS c ++ 6.0
...链接
vid3Dlg.obj : error LNK2001: unresolved external symbol "public: double __thiscall Image::jdlMin(double,double)" (?jdlMin@Image@@QAENNN@Z)
Debug/vid3.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
我也尝试了这个:
template <class T> T Image::jdlMin( T a, T b )
我得到同样的错误。
//Image.h
class Image
{
public:
Image();
virtual ~Image();
template <class T> T jdlMin( T a, T b );
}
//Image.cpp
Image::Image()
{
}
Image::~Image()
{
}
template <class T> T jdlMin( T a, T b )
//I tried this also: template <class T> T Image::jdlMin( T a, T b )
{
return ( a < b );// ? a : b;
}
//CVid3Dlg.cpp
void CVid3Dlg::exTemplate()
{
Image *im = new Image();
int s=0;
s = im->jdlMin((double)3,(double)4); //
}
答案 0 :(得分:1)
这一次,我编译它(在VC ++ 10下)来测试功能:
//Image.h
template<typename T>
class Image
{
public:
Image() {};
virtual ~Image() {};
T jdlMin( T a, T b );
};
//Image.cpp
#include "Image.h"
template <typename T>
T Image<T>::jdlMin( T a, T b )
{
return ( a < b );
};
int _tmain(int argc, _TCHAR* argv[])
{
Image<double> *im = new Image<double>();
double s = 0.0;
s = im->jdlMin( 3.0 , 4.0 );
return 0;
}
希望有帮助...
再见,我看了一下很好的C ++文档:“class T”和“typename T”具有完全相同的含义,行为方式完全一样......;)
答案 1 :(得分:0)
你错过了函数定义前的类。
template <class T> T jdlMin( T a, T b )
应该是
template <class T> T Image::jdlMin( T a, T b )
而且,定义必须在头文件中,现在我看到你的评论,它在cpp中。
答案 2 :(得分:0)
没有文字的问题,不值得解释!
template <class T> T Image::jdlMin( T a, T b )
{
return ( a < b );// ? a : b;
}