У меня есть класс под названием UIHandling
внутри файла заголовка UIHandling.h
. В верхней части класса я удостоверился, чтобы использовать:ошибка 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