c ++模板链接错误,当我把模板放在另一个类来实例化?

时间:2011-11-27 17:09:50

标签: c++ visual-c++

我不知道这是否有所作为,但我使用的是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); //

}

3 个答案:

答案 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;
}