开发者

Define sorting method ( that use std::sort for sorting) of a templated class in dll and calling it from another project

Sorry for my bad English. I have 2 projects. Project 1 is a MFC dll that contains class CMyContainer, class CEmployee. Project 2 is my main project. In project 2, I created an instance of CMyContainer of type CEmployee. Now I want to sort the container but I got an error

"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)"

How can I fix this problem?

// file MyContainer.h in project 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


Try to export MyComparer from the .dll with _declspec(dllexport)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜