c ++ Ошибка связывания шаблона, когда я помещаю шаблон в другой класс для создания экземпляра? - PullRequest
0 голосов
/ 27 ноября 2011

Я не знаю, если это что-то меняет, но я использую VS c ++ 6.0

Linking ...

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 ]

1 голос
/ 28 ноября 2011

На этот раз я скомпилировал его (под 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» имеют одинаковое значение и ведут себя одинаково ...;)

0 голосов
/ 27 ноября 2011

вопросов без текста, не заслуживают объяснения!

template  <class T> T Image::jdlMin( T a, T b )
{
    return ( a < b );// ? a : b;
}
0 голосов
/ 27 ноября 2011

Вы пропустили класс перед определением функции.

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

должно быть

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

А также, определение ДОЛЖНО быть в заголовочном файле, теперь я вижуВаш комментарий, что он находится в cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...