В настоящее время у меня есть программа, в которой мой основной код находится в файле main.cpp.
Main.cpp включает заголовочный файл "class.h", который объявляет класс, который используется в main.cpp.
Также в main.cpp у меня есть объявления функций, которые объявляют функции, которые я использую в main.cpp.
Код для этих функций находится в отдельном файле .cpp fucntions.cpp.
Как и main.cpp, functions.cpp также включает class.h, так как тип класса используется внутри функций.
class.h содержит только объявление класса.
Код реализации для class.h находится в отдельном файле .cpp classimplementation.cpp.
Все работает нормально, пока я не попытаюсь сделать класс в class.h шаблоном класса.
Тогда я получаю проблемы со связыванием. Исследования и тестирование показали, что это потому, что определение функций класса шаблона должно находиться в class.h вместе с объявлением.
Поэтому я взял необходимый код из classimplementations.cpp и поместил его в class.h.
Это действительно решило мои первоначальные проблемы со связыванием, но вместо этого я получил больше ошибок связывания, которые, кажется, говорят мне, что я пытаюсь переопределить функции, в которые я перешел, в class.h.
Я думаю, это потому, что class.h вызывается main.cpp и снова - functions.cpp.
Поэтому функции в class.h определяются дважды:
Ошибка 41, ошибка LNK2005: «public: __thiscall RecordPocket :: RecordPocket (int)» (?? 0? $ RecordPocket @ VT @@@@ QAE @ H @ Z) уже определен в classimplementation.obj functions.obj
Я знаю, что код реализации класса действительно должен быть исключен из включаемых файлов, но из-за ограничения класса шаблонов из-за необходимости сохранять функции класса локальными, у меня (на мой взгляд начинающего) нет выбора.
Кто-нибудь был в этом сценарии и может дать любой совет.
Я попытался окружить функции, которые я переместил из classimplementation.cpp в class.h, стандартным кодом ifndef CLASSIMP , #define CLASSIMP и PRAGMA ONCE, но ни одна из них не имеет никакого значения.
Если ничего не помогает, я перенесу функции из functions.cpp в main.cpp, чтобы class.h вызывался только один раз, но я бы лучше выяснил, что я делаю неправильно, так как уверен, что так и будет. повториться.