У меня есть два проекта ProjA и ProjB в одном решении в visual studio 2008. ProjA зависит от материала в ProjB. ProjB содержит только заголовки, поэтому ничего не нужно строить и библиотеки нет. ProjB определяет шаблон templB в заголовке TemplB.h. ProjA использует эту функцию шаблона как templB. Пока все работает нормально. Однако, когда я явно создаю templB в TemplB.h, я получаю ошибку компоновщика LNK2001, говорящую мне, что templB является нерешенным внешним символом.
В чем проблема? Предполагает ли VS, что явно созданный шаблон находится в каком-либо объектном файле или библиотеке в ProjB, с которым я должен ссылаться, даже если в ProjB нет каких-либо объектных файлов???
Благодарю.
Я поставил здесь два минимальных тестовых проекта: https://dl.dropboxusercontent.com/u/16089481/Projects.zip
Я думаю, вы используете декларацию вместо создания экземпляра...
template <int N> int id() {return N;}
template<> int id<2>(); // just declare id<2> specialisation: definition needed.
template int id<3>(); // Explicit instantiation of id<3>.