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
コマンドを使用することを避けています。すべてのヘルプ
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)
{
...
}
:UIHandling.h
で :
それは私が宣言し、私のコンストラクタを定義する方法とは何かを持っていること?
"答えは、同じファイルを何度も繰り返してコンストラクタを実装することと何か関係がありますが、#ifndef _UIHコマンドを使用することは避けられます。 - あなたはその答えを誤解しています。いいえ、 '#ifndef _UIH'は同じヘッダファイルが複数のソースファイルに含まれるのを防ぎません。 – hvd
それでは何ができますか? – PanthersFan92
同じヘッダファイルが1つのソースファイルに複数回含まれないようにします。 – hvd