随笔-369  评论-37  文章-0  trackbacks-0

   程序中消除warning有两种方法:消极一点不去理他,反正不是error:-);积极一点,则想办法去掉。去掉又用两种方法:一种使用#pragma warning(disable: xxxx),眼不见,心不烦;另外就是找出解决问题的办法了。
  今天做dll库时,在struct中用到了stl:
  class CLASS_TEST
  {
    ...
  private:
    std::vector<MY_STRUCT> m_structs;
  }
  但是编译时,vs2005给出了warning C4251: 'CLASS_TEST::m_structs' : class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class ‘CLASS_TEST’的警告信息。费了很大的劲才解决掉,记录下来。

  在头文件中,定义宏
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

  现在,在变量m_structs前,添加:
template class MYDLL_API std::allocator<myStruct>;
template class MYDLL_API std::vector<myStruct, std::allocator<myStruct> >;
  这样,即可以了。

 

 

posted on 2010-04-07 08:57 小王 阅读(746) 评论(1)  编辑 收藏 引用 所属分类: c++ 程序设计基础

评论:
# re: VS2005 warning C4251 needs to have dll-interface 2010-04-07 18:05 | 陈梓瀚(vczh)
.h
class ICLASS_TEST

.cpp
class CLASS_TEST : public ICLASS_TEST

也不失为一种解决办法,就是你的类再也不能作为value type对待了。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理