2013-12-09 22 views
-2

我有一個變量在一個名爲「external.h」文件,這樣一個變量沒有被定義多次聲明在頭一個共同的變量給出了鏈接錯誤

這個頭文件頭衛兵它。並且其他cpp文件可以使用該變量。 這是什麼樣子

文件:External.h

#ifndef EXTERNAL_COMN_GUARD 
#define EXTERNAL_COMN_GUARD 
    char* rst = "SomeString"; 
#endif 

現在,當我試圖建立我的項目,我得到的,因爲這下面的鏈接錯誤:

1>contact.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>moc_houses.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>moc_messages.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>huts_messages.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>main_messages.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>host.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 
1>main.obj : error LNK2005: "char * rst" ([email protected]@3PADA) already defined in peopleWidget.obj 

我解決通過執行

常量字符RST [] = 「東西」 這個問題;

我想知道爲什麼這個作品,而不是std::string rst = "something"

+0

「這個頭文件中有頭衛士所以一個變量不會被多次定義。「 - 它是。它在每個使用標題的文件中定義。就像每個文件中定義的那樣,其他人都犯了錯誤,併發布了另一個缺乏研究的重複問題。 – 2013-12-09 06:20:13

回答

4
char* rst = "SomeString"; 

聲明並定義變量rst全球聯動的知名度。每次包括External.h你的rst另一種定義。當到了鏈接應用程序的時候,鏈接器發現多個rst的定義,並且不知道如何使用它們。

如果你想有rst多個源之間共享,請拆分它的定義和聲明,或聲明爲靜態:

extern char* rst; // declaration in header 
char* rst = "SomeString"; // definition in only one source file! 

static char* rst = "SomeString"; 
+0

const在哪裏? – Andy