LNK2019: unresolved... (template<class T> class Counter)
От: Аноним  
Дата: 10.09.06 09:41
Оценка:
Добрый день!
Есть класс Counter:
Counter.h:
#pragma once

#include <list>
#include <string>

template<class T> class Counter
{
public:
    Counter(void);
};

Counter.cpp:
#include "Counter.h"

template<class T> Counter<T>::Counter()
{
}

Его использование:
#include <string>
#include "Counter.h"

//Test - класс для теста
void Test::Count()
{
    std::string str = "qwe";
    
    Counter<std::string> counter;
}


При компиляции всё нормально, но линковщик выдает ошибку:

error LNK2019: unresolved external symbol "public: __thiscall Counter<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::Counter<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?$Counter@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAE@XZ) referenced in function "public: static void __cdecl Test::Count(void)" (?Count@Test@@SAXXZ)

Никак не могу понять — в чём дело?! Подскажите, пожалуйста!!!
Re: LNK2019: unresolved... (template<class T> class Counter)
От: Анатолий Широков СССР  
Дата: 10.09.06 09:59
Оценка:
Поместите реализацию конструктора в заголовочный файл. Шаблон, в данном случае, ведет себя как макрос. Для того, чтобы его использовать (инстанцировать), необходимо иметь под рукой его определение (а Вы его спрятали в cpp файл). Вот прямая аналогия — Вам же не приходит в голову отделять объявление макроса от его определения? Думаю, что нет. Вот так же и здесь.
Re[2]: LNK2019: unresolved... (template<class T> class Count
От: np9mi7 Россия  
Дата: 10.09.06 10:22
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Для того, чтобы его использовать (инстанцировать), необходимо иметь под рукой его определение (а Вы его спрятали в cpp файл).


Можно попробывать воспользоваться export — ом Правда это может только http://www.comeaucomputing.com/
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
Re[3]: LNK2019: unresolved... (template<class T> class Count
От: Анатолий Широков СССР  
Дата: 10.09.06 10:27
Оценка:
N>Можно попробывать воспользоваться export — ом Правда это может только http://www.comeaucomputing.com/<br />
<span class='lineQuote level1'>N&gt;</span>


А можно и не пробовать, ибо в понимании концепции шаблонов это нисколько не поможет.
Re: LNK2019: unresolved... (template<class T> class Counter)
От: Roman Odaisky Украина  
Дата: 10.09.06 12:14
Оценка:
Доколе этот вопрос будет задаваться каждую неделю? Куда смотрят разработчики FAQ?
До последнего не верил в пирамиду Лебедева.
Re[2]: LNK2019: unresolved... (template<class T> class Count
От: shank  
Дата: 10.09.06 12:18
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Доколе этот вопрос будет задаваться каждую неделю? Куда смотрят разработчики FAQ?


Есть хорошая статья
Автор(ы): Валерий Лаптев
Дата: 30.10.2004
В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++.
по этому поводу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.