2015-05-04 35 views
0

我有一個文件p2.cpp和2d.cpp,我試圖鏈接到2d.h. 我已經在這兩個.cpp文件包括2d.h,我得到一個錯誤:我無法鏈接2 .cpp文件與視覺工作室中的標題

2d.obj : error LNK2005: "float (* v)[3]" ([email protected]@3PAY02MA) already defined in p2.obj 
1: fatal error LNK1169: one or more multiply defined symbols found. 

我該怎麼辦?

+0

使用頭文件:http://stackoverflow.com/q/4767068/992406 – houssam

+1

頭文件中'* v'塊的樣子是什麼?它應該只是一個聲明,並且您只需要一個cpp文件中的定義。 – Rup

回答

0

I have a file p2.cpp and 2d.cpp which I'm trying to link with 2d.h. I have included 2d.h in both .cpp files and I'm getting an error:

每個符號只能在程序中定義一次(refer One definition rule)。我不確定你的頭文件是什麼樣的,但通常這意味着在你的頭文件中定義一些東西,這是包含在多個編譯單元中的。你可以在頭文件中「extern」它,並確保它是在單獨的編譯團隊中定義的。

從編譯器錯誤,它看起來像你已經定義了一個指向你的頭文件中的函數指針數組。外部這個並在源文件中提供一個單一的定義。

此代碼有效地引起該問題:

//--- Def.h 
#ifndef DEF_H 
#define DEF_H 

float foo(); 

/*extern */float (*floatFunctionArray[3])(); 

#endif /* DEF_H */ 

//--- Def.cpp 
#include "Def.h" 

float foo() 
{ 
    return 0; 
} 

float (*floatFunctionArray[3])() = 
{ 
    foo, foo, foo 
}; 

//--- main.cpp 
#include "Def.h" 

int 
main(int argc, char** argv) 
{ 
    return 0; 
} 

添加註釋「外部」解決了這個問題。