0

我在具有 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。

有人可以向我解释发生了什么以及如何解决这个问题吗?我看不出如何正确链接,因为我创建了 2 个不同的外部变量,而我只初始化了一个。

编辑 :

如果我改变

DLL_A int A::myInt = 5; //initialisation

为了

DLL_A int myInt = 5; //initialisation

它不会链接

谢谢

4

1 回答 1

1

您说“我在监视窗口中看到 &A::myInt 和 &myInt 不同,这意味着(未知)“myInt”变量用于计算”。

这正是你的问题。using namespace A;意味着只有在当前(即全局)命名空间中查找失败myInt才会查找诸如 a 这样的非限定名称。但是调试器显示存在。因此,意味着,第一次查找成功,并且没有对 进行第二次查找。A::myIntmyInt::myInt::A::myInt

于 2013-07-05T13:53:43.520 回答