2011-06-19 93 views
0

我是C++程序設計新手,我試圖製作一個程序來模擬康威的生活遊戲。我差不多完成了,但是當我讓每個函數都有它自己的文件時,我一直在獲取這個鏈接器錯誤。C++鏈接錯誤LNK2005

1>algorithm_change.obj : error LNK2005: "unsigned short height" ([email protected]@3GA) already defined in algorithm.obj 

我的代碼是在https://github.com/rupertsteel/Life/tree/master/Life

+0

@Tim:'定義',而不是'聲明'。 –

+0

你是否在每個文件中定義變量?那就是你最可能遇到的問題 – Tim

回答

3

不看代碼,你有任何文件的全局unsigned short height;?如果是,請將其替換爲extern unsigned short height;,並將unsigned short height;放入包含特定標頭的源文件中。

+2

頭文件幾乎包含了所有聲明爲'extern'的內容(假設在問題發佈之前代碼沒有被糾正)。從它的外觀來看,儘管我沒有看到全局變量(除了'array_length')在哪裏被聲明爲非''外部''。 – cHao

+0

謝謝,我看到另一個問題,但沒有清楚地說明答案。 –

1

幾點意見:

1)array_length在life.h需要被externed

2)所有externed變量(寬度,高度,蜱,count_array,change_array,error_check,algorithm_length,array_length)需要在某個地方定義。

在你的代碼中,你已經基本告訴編譯器這些變量存在,但實際上並沒有將它們放置在任何地方。在全球範圍內的.cpp文件中的一個,你需要把:

unsigned short int width; 
unsigned short int height; 
unsigned long int ticks; 
unsigned short int count_array[10923][10923]; 
bool change_array[10923][10923]; 
int error_check; 
unsigned long int algorithm_length; 
unsigned long int array_length; 

這是完全一樣的,你有什麼life.h,除了沒有extern關鍵字。這實際上會創建變量,而不是現在他們沒有具體實現的地方。

如果您進行了更改,我建議您的代碼將編譯(使用gcc進行測試)。這就是說,你看到的實際錯誤是沒有意義的。