2012-06-25 57 views
2

我正在爲HP-UX和Linux編寫一個跨平臺的C++應用程序。我在想,我怎麼可能去使用,而不以下錯誤彈出宣佈在文件1的內部文件3一個const char *變量:如何在源文件中使用頭文件中聲明的全局變量?

/usr/ccs/bin/ld: Duplicate symbol "OPERATING_SYSTEM" in files smac_dictionary.o and smac_dsl_parser.o 
/usr/ccs/bin/ld: Found 1 duplicate symbol(s) 
gmake: *** [smac_dsl_parser] Error 1 

感謝。

+0

可能會更好地使用宏和條件編譯,而不是運行測試(這是一個真正的使用宏)。 –

+0

提供的答案是否回答你的問題? – trumpetlicks

回答

3

[EDIT1]

鋸參考#定義。他的意思是,在你的頭文件做到這一點(myDeclare.h):

#ifndef __YOURNAMEHERE__ 
#define __YOURNAMEHERE__ 

// All of your declarations here 
extern const char * myVar[6]; 

#endif 

在myDeclare.c或CPP

const char * myVar[6] = {'a', 'b', 'c', 'd', 'e', 'f'}; 

現在你應該可以包括myDeclare.h任何地方,並且編譯只會嘗試引入一次變量或代碼。

[原文] 我一直能夠通過使用頭文件內聲明的關鍵字的extern要做到這一點,那麼真正的「定義」我的C源文件中的變量。

即使您必須從多個源文件中引用相同的變量(即將header1.h包含在source1.c,source2.c和source3.c中),也應該可以工作。

這也是你會怎麼做它在C++(儘管我的例子中引用的.c文件而不是cpp文件)