1、C4251
原因:数据成员方在dll导出类中使用模板类引起的 ;
方法:
1>#program warning( disable:4251 )-->不推荐;
2>将该数据成员改为指针方式(Ps:记住初始化和释放);
3>将该模板类及其依赖类导出.eg:
class __declspec( dllexport ) Test{ public: template class __declspec( dllexport ) std::allocator ; template class __declspec( dllexport ) std::vector
>; public: std::vector
m_objCon;};
这种方法要注意的是必须要把要导出模板类的模板数据成员一并导出。有点类似于显式实例化。比如说你要导出boost::shared_ptr就还必须将其依赖的shared_count一并导出。导出map还需要导出对应pair等等。
#include #include using namespace std;// 这些放到.h中class Test_imp;class __declspec( dllexport ) Test{ // 构造函数中初始化 析构中释放m_pImp; void test(); public: Test_imp* m_pImp;};// 这个类放到cpp中去class Test_imp{ public: void test(){} std::vector m_objCon;};// 放到cpp中void Test::test(){ m_pImp->test();}