Определите метод сортировки (который использует std :: sort для сортировки) шаблонного класса в dll и вызов его из другого проекта - PullRequest
0 голосов
/ 06 ноября 2010

Извините за мой плохой английский. У меня есть 2 проекта. Project 1 - это MFC dll, который содержит класс CMyContainer, класс CEmployee Проект 2 - мой основной проект. В проекте 2 я создал экземпляр CMyContainer типа CEmployee. Теперь я хочу отсортировать контейнер, но я получил ошибку

"error LNK2019: unresolved external symbol "bool __cdecl MyComparer(class CEmployee *,class CEmployee *)" (?MyComparer@@YA_NPAVCEmployee@@0@Z) referenced in function "public: void __thiscall CMyContainer<class CEmployee>::sortContainer(void)" (?sortContainer@?$CMyContainer@VCEmployee@@@@QAEXXZ)"

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

// файл MyContainer.h в проекте 1

#include <vector>

template <class T> 
class _declspec(dllexport) CMyContainer
{
public:
    CMyContainer(void);
    ~CMyContainer(void);
        ...

    void sortContainer(); 
private:
    std::vector<T*> items;  
    typename std::vector<T*>::iterator it;
};
template <class T> void CMyContainer<T>::sortContainer()
{
    typedef bool (*comparer_t)(T*,T*);
    comparer_t cmp = &MyComparer;
    std::sort(items.begin(), items.end(), cmp);
}


//File Employee.h in project 1
#include "MyContainer.h"


class _declspec(dllexport) CEmployee
{
public:
    CEmployee(void);
    ~CEmployee(void);
        void setEmployeeCode(CString);
        CString getEmployeeCode();
        friend bool MyComparer(CEmployee*, CEmployee*);
private:
        CString m_szEmployeeCode;
}

//File Employee.cpp in project 1
void CEmployee::setEmployeeCode(CString val){
    m_szEmployeeCode= val;
}


CString CEmployee::getEmployeeCode(){

    return  m_szEmployeeCode;
}
bool MyComparer(CEmployee*pEmp1, CEmployee*pEmp2)
{
    return (pEmp1->getEmployeeCode().Compare(pEmp2->getEmployeeCode())<0);
}
//File main.cpp in project 2
#include <..\Models\MyContainer.h>
#include <..\Models\Employee.h>
...
CMyContainer<CEmployee> *pListEmployee;
... // insert into pListEmployee
// sort pListEmployee
pListEmployee.sortContainer();//-> This command cause error

1 Ответ

0 голосов
/ 06 ноября 2010

Попробуйте экспортировать MyComparer из .dll с _declspec (dllexport)

...