类的静态成员变量的值为什么改变了?

zhugay 2013-07-06 03:19:26
vc6 ,MFC
一个dll project,有一个类
class A{
static CString m_str;
static void SetString(CString s); //给m_str赋值,单步调试发现的确是赋值成功了的。
};

在.cpp文件中
CString A::m_str;

编译连接正确。

一个app程序使用dll的类A
CString s = A::m_str;
编译连接,说m_str是unresoved, 为什么?
只有把m_str再声明一遍在app工程里
CString A::m_str;
链接没有问题了。

执行程序就有问题

单步调试:代码进入dll里时,m_str显示被赋值了,但返回到exe的代码时,m_str就成了空的了。
静态变量为什么值会发生变化?如何解决?
...全文
317 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-07-06
  • 打赏
  • 举报
回复
是有两个 CString A::m_str; 变量了. 你需要把 dll 中的变量导出, exe 再去链接. 不能连接不过就重新定义一个...
FancyMouse 2013-07-06
  • 打赏
  • 举报
回复
>只有把m_str再声明一遍在app工程里 那样你exe的这个m_str和dll的m_str是两个没有关系的东西了。exe里的代码只看得到exe的m_str看不到dll的m_str。
qzf362269994 2013-07-06
  • 打赏
  • 举报
回复
静态成员变量被限制作用域了吧,
zhugay 2013-07-06
  • 打赏
  • 举报
回复
不直接使用静态成员变量,而通过函数Set和Get就可以了,进行设置值和返回值。

65,187

社区成员

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

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