有关STL 中set使用时的问题 请大家帮下忙 谢谢

pubb1986 2007-04-13 01:49:22
我创建了两模块:一个为dll 一个为exe

在dll模块一个类中写了:
.h文件中
static void Deal(set<int> &IntSet);
.cpp文件中
void CExample::Deal(set<int> &IntSet)
{
IntSet.insert(1);
IntSet.insert(4); //后面调用的时候将会出错的地方
}


然后我在exe模块中调用:
set<int> IntSet;
IntSet.insert(9);
CExample::Deal(IntSet);


程序运行到IntSet.insert(4); 这句的时候就出问题了 提示信息:

0xC0000005:Access Violation 很是困惑 请大家帮忙解决下 谢谢

我用的是VC6.0
...全文
228 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-04-13
  • 打赏
  • 举报
回复
看起来可以,未必是真的可以
pubb1986 2007-04-13
  • 打赏
  • 举报
回复
刚我又去试了下vector
怎么vector是可以这么用的呢?
taodm 2007-04-13
  • 打赏
  • 举报
回复
以前有人讨论过的,stl的allocator实现问题是你现在出错的原因。
而无论如何,导出class都很危险。因为dll和exe里很可能各有一份代码。
pubb1986 2007-04-13
  • 打赏
  • 举报
回复
恩 收到 谢谢 taodm前辈 哈哈
帮忙解决过不少问题了的

我先去试下

就是不明白为什么那样做不行。。。
taodm 2007-04-13
  • 打赏
  • 举报
回复
把操作封装成dll接口,而不要暴露作为内部实现细节的容器。
pubb1986 2007-04-13
  • 打赏
  • 举报
回复
那我怎么样可以实现类似的功能呢?
不在同一模块中,通过传set容器的引用 然后在函数中进行对set容器的操作

taodm 2007-04-13
  • 打赏
  • 举报
回复
这个不是我能帮得了的。
“在VS2003上使用的时候是可以的”也只是看起来可以,未必是真的可以。
知道这个导出class是雷区,所以我绝对不去碰。
pubb1986 2007-04-13
  • 打赏
  • 举报
回复
但我在VS2003上使用的时候是可以的
我放到VC6下就不行了的
taodm 请帮忙解释下这个问题
taodm 2007-04-13
  • 打赏
  • 举报
回复
哎,不要在dll里导处class,尤其是stl容器。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧