gpt4 book ai didi

c++ - 无法跨多个 DLL 在 header 中定义单个对象

转载 作者:行者123 更新时间:2023-11-28 07:31:55 25 4
gpt4 key购买 nike

我在具有 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 中调试时,我在监 window 口中看到 &A::myInt 和 &myInt 不同,这意味着(未知的)“myInt”变量用于计算,而 A: :myInt 正确初始化为 5。

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

编辑:

如果我改变

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

对于

DLL_A int myInt = 5; //initialisation

它不会链接

谢谢

最佳答案

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

这正是您的问题。 using namespace A; 意味着像 myInt 这样的非限定名称将在A 中仅在 查找之后查找在当前(即全局)命名空间中失败。但是调试器显示 ::myInt 存在。因此,myInt表示::myInt,第一次查找成功,没有为::A::myInt做第二次查找。

关于c++ - 无法跨多个 DLL 在 header 中定义单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com