Проблема реализации базовых шаблонов

0

Прочитав много ссылок о настройке шаблонов на классах, я попал в эту запутанную ошибку компилятора:

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);
}

Очевидно, что предыдущий код ничего не полезен, я просто строю модель шаблонов для запуска проекта. Может ли кто-нибудь объяснить, что я не понимаю о структурировании этого решения, чтобы соответствовать целям шаблонного класса, который может правильно построить?

Теги:
templates

3 ответа

0

переместите реализацию в заголовок.

0

Из-за того, как работают шаблоны, ваша реализация должна быть в файле заголовка, а не в отдельном файле.cpp. Так что вам нужно это:

template<typename U, typename V>
class test {
public:
    test(int number)
    {
    }
};
0

Помимо перемещения реализации в заголовок, вы также можете использовать трюк, показанный в вопросе, в определении шаблона ссылки и декларации в отдельных файлах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню