2011-03-15 54 views
0

我有兩個用C編寫的項目:一個客戶端和一個服務器端,它們都包含很多通用的全局變量。我想寫一個類(clientbot和serverbot使用接口事務),它將調用每個項目的主要功能。如何處理兩個項目之間通用的全局變量?

我已經將頭文件中的所有常用全局變量移到了兩個項目中。但在構建它時會拋出鏈接錯誤。

錯誤3錯誤LNK2005:(?g_nBytestoSend @@ 3HA) 「INT g_nBytestoSend」 中已經做出transimpl.obj agentBot.obj

任何人都可以建議我應該怎麼辦呢?

+0

也許你沒有刪除原來的?或忘記了全局頁面中的#ifndef? – amit 2011-03-15 07:34:00

回答

2

您不應該將實際變量放在標題中,只有extern這些聲明。將實際變量放在單獨的.c.cpp文件中並與其鏈接。

在頭(讓我們稱之爲它globals.h),你把這個宣言:

extern int g_nBytesToSend; 

然後創建一個新的代碼文件來保存實際變量(比如global.c):

int g_nBytesToSend; 

假設您有三個代碼文件server.cclient.cbot.c,並且您使用的是gcc。你會建立這個樣:

gcc -o server.o -c server.c 
gcc -o client.o -c client.c 
gcc -o bot.o -c bot.c 
gcc -o globals.o -c globals.c 
gcc -o mybot server.o client.o bot.o globals.o 

(儘量保持你的全局的數量較少。)

+0

我使用開源項目n兩個文件都有相同的全局變量。我必須編寫一個接口,根據情況 – ashmish2 2011-03-15 07:37:44

+0

@honeybadger調用這兩者中的任何一個,它與Mat寫的內容有什麼矛盾? – 2011-03-15 07:43:55

+1

@honeybadger,請澄清你的問題(編輯問題本身),我不明白你的意見。 – Mat 2011-03-15 07:44:00

0

你有沒有protect與IFNDEF頭文件?

+0

我使用開源項目n兩個文件都有通用的全局變量。我必須編寫一個接口,根據情況調用這兩者中的任何一個。所以我必須保持這個通用的全局變量可用於這兩個文件。因此,我使用了一個頭文件 – ashmish2 2011-03-15 07:41:50

+0

@honeybadger:如果我的文章(我已更新)和Ilya Kogan都不能幫助你,那麼你需要更清楚哪些內容不起作用。請使用其他信息編輯您的問題(不要在這些評論中澄清您的問題)。 – Mat 2011-03-15 08:05:13

相關問題