这通常是由于以数据成员方式在DLL导出类中使用了模板类造成的。比如:
#include <iostream>
#include <vector>
using namespace std; class __declspec( dllexport ) Test
{
public:
std::vector<int> m_objCon;
}; int main()
{ return 0;
} 这会导致这个警告:
warning C4251: “Test::m_objCon”: class“std::vector<_Ty>”需要有 dll 接口由 class“Test”的客户端使用
1> with
1> [
1> _Ty=int
1> ]
这个问题主要要描述的是不同的地方的vector的实现可能不一样所造成的问题。所以我们应该将其导出。有很多方法可以解决这个问题的。 第一种: 无视它或者#pragma warnind( disable: 4251 )
第二种:将该数据改为指针方式:
class __declspec( dllexport ) Test
{
public:
std::vector<int>* m_objCon;
};
然后在构造函数和析构函数中分别初始化和释放它。
第三种:
将该模板类及其依赖类导出。
#include <iostream>
#include <vector>
using namespace std; class __declspec( dllexport ) Test
{
public:
template class __declspec( dllexport ) std::allocator<int>;
template class __declspec( dllexport ) std::vector<int, std::allocator<int> >;
public: std::vector<int> m_objCon;
}; int main()
{ return 0;
}
这种方法要注意的是必须要把要导出模板类的模板数据成员一并导出。有点类似于显式实例化。比如说你要导出boost::shared_ptr就还必须将其 依赖的shared_count一并导出。导出map还需要导出对应pair等等。很麻烦啦~所以我们还是选择第四种吧。 第四种:Impl。
#include <iostream>
#include <vector>
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<int> m_objCon;
}; // 放到cpp中
void Test::test()
{
m_pImp->test();
} int main()
{
return 0;
}

  

最新文章

  1. 在不损坏C盘的情况下为C盘扩容,适用于Win
  2. PHP的排序算法跟查找算法
  3. java集合-ArrayList
  4. ubuntu 12.04 react-native 安装
  5. 磁盘IO的性能指标
  6. 手动purge优化器的统计信息与AWR快照,减少对sysaux表空间的占用
  7. 1106c语言语法树
  8. 纯JS Web在线可拖拽的流程设计器
  9. Linux环境下GIT初次使用
  10. Entity Framework 杂碎
  11. phpcms v9 分页
  12. js深入研究之无法理解的js类代码,extend扩展
  13. 交换机VLAN研究
  14. 刚实习的自己-php
  15. python已安装了DNS处理模块,执行时却报错ImportError
  16. 服务器SSL不安全漏洞修复方案
  17. ovs常用操作
  18. InstallShield-常用prq文件的下载地址
  19. Ubuntu install mysql database
  20. PHP封装curl的调用接口及常用函数

热门文章

  1. Golang真言
  2. ibatis内置类型
  3. Java线程入门第二篇
  4. redisTemplate 总结
  5. java:模拟队列操作
  6. poj 2992 Divisors (素数打表+阶乘因子求解)
  7. libevent学习笔记 —— 第一个程序:计时器
  8. BZOJ3193: [JLOI2013]地形生成
  9. 【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
  10. BootstrapValidator超详细教程