2011-05-09 90 views
0

我正在使用visual studio 2010,並相信我有一個項目設置問題。我有有一些聲明中有一個頭文件:Pesky鏈接錯誤

definitions.h

#include <string> 

struct myStruct 
{ 
    std::string x[4]; 
    std::string y[8]; 
}; 

void InitializeStructData(); 

extern myStruct data[12]; 

和cpp文件初始化我的結構:

definitions.cpp

#include "definitions.h" 
#include <string> 

mySturct data[12]; 

void InitializeStructData() 
{ 
    data[0].x[0] = "a"; 
    data[0].x[1] = "b"; 
    .... 
    data[0].y[0] = "a"; 
    .... 
    .... 
    data[11].y[7] = "done initializing"'; 
} 

和我有一個窗體有一些按鈕和事物的文本我根據不同的情況從數組中填充:

myForm.cpp

#include "definitions.h" 

... 

//form initialization 

只要我有兩個#include "definitions.h"語句,我得到鏈接錯誤:

Error 1 error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * Definitions" 
Error 2 error LNK1169: one or more multiply defined symbols found 
+0

我真的不確定該函數是否需要初始化,我沒有在原始代碼中。這只是我試圖提出自己的解決方案。我很難過。 – JoLT 2011-05-09 22:15:52

+1

你的測試用例顯然不是逐字的;錯誤與代碼不匹配,並且在'definitions.cpp'中有錯字。請製作一個適當的測試用例來證明問題。 – 2011-05-09 22:29:00

+0

對不起,我只是想讓問題比我的實際代碼更清晰和更小。我會解決的。 – JoLT 2011-05-10 12:25:38

回答

4

你的問題是缺少的重要組成部分。

您在標頭中有一個std::string* Definitions,您忘記使用extern

+3

@Downvoter:請留下解釋性評論。 – 2011-05-09 22:22:58

+0

我不敢相信這個網站仍然是個問題。 :/ – GManNickG 2011-05-09 22:27:31

+0

@GMan:可能只是一個巨魔。希望自動化系統能在一夜之間照顧好它。 :) – 2011-05-09 22:33:52

0

你有你的內部代碼(h文件):

#ifndef DEFINITIONS_H 
#define DEFINITIONS_H 

#endif 

,以幫助您防止多次定義它,如果你把它包含在多個地方?

+3

這將不會阻止跨多個翻譯單元的多重定義問題。只有在單個TU內編譯器重新定義。 (雖然標頭警衛被推薦,但這不是解決這個問題的辦法。) – 2011-05-09 22:22:06

+0

明白了。謝謝。 – 2011-05-10 16:31:17