【发布时间】:2010-10-07 08:46:04
【问题描述】:
我在制作全局变量时遇到了小问题。我正在使用 Visual Studio 2008 和标准 C++。
我有两个项目,一个是静态库,第二个是使用这个库的测试程序。我在 global.h 中有一个全局变量,例如
#ifndef GLOBAL_H
#define GLOBAL_H
#include <string>
extern std::string globalWord;
#endif // GLOBAL_H!
我有一个 global.cpp 我正在初始化这个变量。这个变量在我的库项目中使用。我正在从测试项目中为这个变量设置一个值,但该值没有反映在库项目中。
我已经调试过,它在测试项目中显示了新值,但是当控件到达库项目时,这个变量值显示为空。那么这个全局变量的作用域是不是仅限于它所属的项目呢?
或者有更好的方法吗?我不想修改我的库中的函数或构造函数参数来传递这个值。
任何帮助都会很棒。
编辑:
这是这个变量在 global.cpp 中的声明方式
#include <string>
#include "../global.h"
std::string globalWord = "";
这就是我在图书馆中使用它的方式
#include "../global.h"
string text = globalWord;
谢谢
【问题讨论】:
-
显示所有代码。这应该像你描述的那样有效,所以肯定有其他问题。
-
你提到的那个库,它是一个单独的DLL吗?它是静态链接的 DLL 吗?还是您使用
LoadLibrary()加载它?可能是延迟加载? -
它是一个静态库。我已经在测试项目的项目依赖项中设置了。
-
我支持 Pax -- 既然您已经展示了代码,我相信这应该可以正常工作。可能是一些不相关的问题,例如您正在链接旧版本的库? (例如,您忘记重新构建库的发布版本。)这两个模块也是使用 相同 设置构建的吗?
-
等一下——你的库中的“字符串文本”也是一个全局变量吗?如果是这样,那么您遇到了“静态初始化顺序惨败”,这是 C++ 的一个已知问题。请参阅马特的答案以获取解决方案。
标签: c++ variables global-variables scope