当我把模板放在另一个要实例化的类中时,模板链接错误

visual c++ Template linking error when I put template in another class to instantiate?

本文关键字:错误 链接 另一个 实例化      更新时间:2023-10-16

我不知道这是否有区别,但我使用的是vsc++ 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); //
}

这次,我编译了它(在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"answers"typename T"有完全相同的含义和行为完全相同的方式…div;)

没有文字的问题,不值得解释!

template  <class T> T Image::jdlMin( T a, T b )
{
    return ( a < b );// ? a : b;
}

您错过了函数定义前面的类。

template  <class T> T jdlMin( T a, T b )
应该

template  <class T> T Image::jdlMin( T a, T b )

而且,定义必须在头文件中,现在我看到你的评论,它在cpp.

相关文章: