Шаблоны c ++ dll (ошибка компоновщика) - PullRequest
0 голосов
/ 17 февраля 2011
template <class T>
class PST_OBJECT_RECOGNITION_API test
{
public:
    T t;

    inline bool operator==(const test & other)
    {
        return t == other.t;
    }
};

class PST_OBJECT_RECOGNITION_API test_int
    : public test<int>
{
};

В другом проекте, который импортирует эту DLL, у меня есть эта ошибка

Error   3   error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall test<int>::operator==(class test<int> const &)" (__imp_??8?$test@H@@QAE_NABV0@@Z) referenced in function _main main.obj

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Является ли созданная шаблонная функция где-нибудь в DLL?

Помните, что определения шаблонов генерируются при создании экземпляров, когда речь идет о классах, компилятор генерирует определение классов (расположение в памяти и т. П.), Но может выбрать не генерировать все методы, если они не используются явно.

Попробуйте указать компилятору явно создать экземпляр функции через

template bool test<int>::operator==(const test<int> &);

Теперь, поскольку он имеет шаблон и помечен inline, вероятно, лучше всего, чтобы он был определен в заголовке.

0 голосов
/ 17 февраля 2011

Решение выглядит следующим образом (удаление PST_OBJECT_RECOGNITION_API из класса шаблона):

template <class T>
class test
{
public:
    T t;

    inline bool operator==(const test<T> & other)
    {
        return true;
    }
};

class PST_OBJECT_RECOGNITION_API test_int
    : public test<int>
{
};
...