Прочитав много ссылок о настройке шаблонов на классах, я попал в эту запутанную ошибку компилятора:
Linking...
main.obj : error LNK2019: unresolved external symbol "public: __thiscall test<int,int>::test<int,int>(int)" (??0?$test@HH@@QAE@H@Z) referenced in function _main
fatal error LNK1120: 1 unresolved externals
Оскорбительный код, как можно проще:
test.h
template<typename U, typename V>
class test {
public:
test(int number);
};
test.cpp
#include "test.h"
template<typename T, typename U>
test<T, U>::test(int number){}
main.cpp
#include "test.h"
void main() {
test<int, int> a = test<int, int>(4);
}
Очевидно, что предыдущий код ничего не полезен, я просто строю модель шаблонов для запуска проекта. Может ли кто-нибудь объяснить, что я не понимаю о структурировании этого решения, чтобы соответствовать целям шаблонного класса, который может правильно построить?
переместите реализацию в заголовок.
Из-за того, как работают шаблоны, ваша реализация должна быть в файле заголовка, а не в отдельном файле.cpp. Так что вам нужно это:
template<typename U, typename V>
class test {
public:
test(int number)
{
}
};
Помимо перемещения реализации в заголовок, вы также можете использовать трюк, показанный в вопросе, в определении шаблона ссылки и декларации в отдельных файлах