我有一個名爲UIHandling.h
的頭文件中稱爲UIHandling
的類。 在班上名列前茅我確信使用方法:錯誤LNK2005:構造函數已定義
#ifndef _UIH_
#define _UIH_
當然,結束了與#endif
文件這個頭文件由構造函數的所有實現。 我已經包括在我的計劃,但由於某種原因,這個類在許多文件,我得到以下編譯器錯誤:
1>CompaniesMap.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>CompaniesMap.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>Company.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>Company.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>Date.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>Date.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>GovStock.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>GovStock.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>main.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>main.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>Stock.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(enum eType)" ([email protected]@[email protected]@@@Z) already defined in Bond.obj
1>Stock.obj : error LNK2005: "public: __thiscall UIHandling::UIHandling(void)" ([email protected]@[email protected]) already defined in Bond.obj
1>D:\Asaf\C\VS\hw5\HW5\Debug\HW5.exe : fatal error LNK1169: one or more multiply defined symbols found
所以我去Bond.h
和Bond.cpp
,看看是否有什麼奇怪的東西(像的實現UIHandling::UIHandling()
或類似的東西),並沒有。
我在另一個問題中看到,當你違反ODR這個錯誤,但我沒有。 In another similar question答案是,這與一遍又一遍地包含相同的文件導致構造函數的許多不同實現有關,但使用#ifndef _UIH
命令可以避免這種情況。
它可能有一些做我如何聲明和定義構造函數我: 在UIHandling.h
:
class UIHandling : public exception
{
public:
UIHandling(); // Default C'tor - error unknown
UIHandling(eType); // C'tor with error type
template <class T>
UIHandling(eType, T); // C'tor with error type and relevant number
...
}
...
UIHandling::UIHandling()
{
...
}
UIHandling::UIHandling(eType e)
{
...
}
template <class T>
UIHandling::UIHandling(eType e, T number)
{
...
}
任何幫助嗎?
「在另一個類似的問題的答案是,這已經是與在包括相同的文件,並在導致構造的許多不同的實現,但使用的#ifndef _UIH命令可以避免的。」 - 你非常誤解那裏的答案。不,'#ifndef _UIH'不能阻止同一個頭文件被包含在多個源文件中,也不應該。 – hvd
那它甚至還能做什麼? – PanthersFan92
它可以防止在單個源文件中多次包含相同的頭文件。 – hvd