我在使用2个DLLS的解决方案上使用VS2010,我正在尝试定义要在两个DLLS中使用的全局变量。
我有以下代码:
header.h
namespace A
{
extern DLL_A int myInt;
}
在DLL A中的a.cpp文件中:
#include "header.h"
using namespace A;
DLL_A int A::myInt = 5; //initialisation
在DLL A中的另一个b.cpp文件中:
#include "header.h"
using namespace A;
//use myInt for computations in some method, eg myInt++; etc
DLL_A被定义为通常的:
#ifdef SOME_DEFINE
# define DLL_A __declspec(dllexport)
# else
# define DLL_A __declspec(dllimport)
# endif
然而,在b.cpp中进行调试时,我会在监视窗口中看到& A :: myInt和& myInt是不同的,这意味着(未知)“myInt”变量用于计算,而A :: myInt正确初始化为5。
有人可以向我解释发生了什么以及如何解决这个问题?我没有看到如何正确链接,因为我创建了两个不同的外部变量,我只初始化一个。
编辑:
如果我改变
DLL_A int A::myInt = 5; //initialisation
的
DLL_A int myInt = 5; //initialisation
它不会链接
感谢
答案 0 :(得分:1)
你说“我在观察窗口看到& A :: myInt和& myInt是不同的,这意味着(未知)”myInt“变量用于计算”。
确实存在问题。 using namespace A;
表示在查找在当前(即全局)命名空间中失败后,myInt
只会在<{1}}中查找A
这样的非限定名称。但调试器显示::myInt
存在。因此,myInt
表示::myInt
,第一次查找成功,而::A::myInt
没有进行第二次查找。