[英]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.