2012-02-06 84 views
1

我有一個全局的,我想分享多個文件。讓我們把它叫做:跨多個源文件使用全局(使用extern多次)

library.cpp:

HookContext g_context; 

然後,我有希望訪問這一全球其他兩個文件:

A.cpp:

extern HookContext g_context; 

B.cpp;

extern HookContext g_context; 

當我所有這些文件鏈接在一起,我的鏈接抱怨以下警告:

B.OBJ:錯誤LNK2005:(?g_context @@ 3VHookContext @@ A) 「類HookContext g_context」 已定義在A.obj

我使用extern不正確嗎?我應該怎樣做才能訪問A和B中的上下文?

注意:在這種情況下,我不希望使用任何頭文件來定義上下文。

謝謝

+1

是b的一個子類型嗎? – L7ColWinters 2012-02-06 05:21:29

+0

不,A和B是定義完全不同類的行爲的完全不同的文件。 – JoshG 2012-02-06 05:23:44

+0

精闢回答了[這裏](http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c) – bluefalcon 2012-02-06 05:24:12

回答

0

牛米是正確的,在本身上面的代碼是正確的。 事實證明,我的一條線實際上是在其末尾添加了一個額外的「()」。像這樣:

extern HookContext g_context();

這導致g_context在該翻譯單元中被初始化和實例化。

當我刪除()的時候它結束了工作。

0

我會使用某種單身人士。使您能夠稍後插入一些初始化或將其轉換爲其他內容。

library.cpp:

static HookContext g_context; 
HookContext& getHookContext() 
{ 
    return g_context; 
} 

A.cpp:

extern HookContext& getHookContext();