繁体   English   中英

无法跨多个DLL在标头中定义单个对象

[英]can't define a single object in header accross several DLL

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

它不会链接

谢谢

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

那正是你的问题。 using namespace A; 意味着只有当前(即全局)名称空间中查找失败 ,才会在A中查找诸如myInt类的不合格名称。 但是调试器显示::myInt存在。 因此, myInt意味着::myInt ,第一次查找成功,并且::A::myInt没有第二次查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM