Проблема с шаблонами
От: Tolanay Россия  
Дата: 05.02.04 15:01
Оценка:
Такое объявление в заголовке файла:
class CHoughLines
{
public:
    CHoughLines();
    virtual ~CHoughLines();

public:
template<class CXY_Iter>
    bool Generate(const CXY_Iter& begin, const CXY_Iter& end); 

// ...


Это в теле:
template<class CXY_Iter>
bool CHoughLines::Generate(const CXY_Iter& begin, const CXY_Iter& end)
{

//...


Это попытка использования шаблона:
std::list<CXY> pnts;
// заполнение списка
// ...

CHoughLines hgLines;
hgLines.Generate(pnts.begin(), pnts.end());


Линковщик выдает ошибку:
error LNK2001: unresolved external symbol "public: bool __thiscall CHoughLines::Generate(class std::list<class CXY,class std::allocator<class CXY> >::iterator const &,class std::list<class CXY,class std::allocator<class CXY> >::
iterator const &)" (?Generate@CHoughLines@@QAE_NABViterator@?$list@VCXY@@V?$allocator@VCXY@@@std@@@std@@0@Z)
Re: Проблема с шаблонами
От: Vamp Россия  
Дата: 05.02.04 15:07
Оценка: 2 (1)
Так. Повторяем...
Определение шаблона (функции или класса) должно находиться в каждой единице трансляции. Т.е. входить не в .cpp, а в .h файл.
Да здравствует мыло душистое и веревка пушистая.
Re: Проблема с шаблонами
От: Lorenzo_LAMAS  
Дата: 05.02.04 15:09
Оценка: 2 (1)
Если определения функции не видно в точке использования, то так и должно быть. Выход — определить функцию в заголовке, или объявить в заголовке явную специализацию (определить ее в файле реализации), или определить функцию в файле реализации и использовать явное инстанцирование.
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.