跨多个源文件使用全局(多次使用extern)

时间:2012-02-06 05:18:35

标签: c++ linker

我想要在多个文件中共享全局。让我们称之为:

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中访问上下文?

注意:在这种情况下,我不希望使用任何头文件来定义上下文。

由于

2 个答案:

答案 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在该翻译单元中被初始化和实例化。

当我删除()时,它最终工作了。