我想要在多个文件中共享全局。让我们称之为:
library.cpp:
HookContext g_context;
然后,我还有两个其他文件要访问此全局:
A.cpp:
extern HookContext g_context;
B.cpp;
extern HookContext g_context;
当我将所有这些文件链接在一起时,我的链接器会抱怨以下警告:
B.obj:错误LNK2005:已在A.obj中定义的“class HookContext g_context”(?g_context @@ 3VHookContext @@ A)
我是否错误地使用了extern?如何在A和B中访问上下文?
注意:在这种情况下,我不希望使用任何头文件来定义上下文。
由于
答案 0 :(得分:0)
我会使用某种单身人士。使您能够在以后插入一些初始化或将其转换为其他内容。
library.cpp:
static HookContext g_context;
HookContext& getHookContext()
{
return g_context;
}
A.cpp:
extern HookContext& getHookContext();
答案 1 :(得分:0)
n.m是正确的,上面的代码本身是正确的。 事实证明我的一条线实际上在它的末尾增加了一个“()”。像这样:
extern HookContext g_context();
这导致g_context在该翻译单元中被初始化和实例化。
当我删除()时,它最终工作了。