Итак, я пытаюсь создать небольшой 3D-движок в качестве упражнения на VC++ 8.0. У меня есть статическая библиотека MathLib и Render static lib, связанная с моим exe testBed. Прямо сейчас Render имеет два класса: Color и DXManager3D. Цвет включает в себя мой Vector.h из MathLib просто отлично, никаких проблем.Static Lib Ошибка множественного определения связи
Вторым я пытаюсь включить Vector.h в DXManager3D, он взрывает меня, говоря, что символ определяется дважды, а второе определение игнорируется (предупреждение из lib). Я подумал, что, возможно, в том числе и два раза это вызывало это, так как тест я удалил Vector.h из Color.h и оставил его в DXManager3D.h - той же самой проблеме. Я проверил тройку, чтобы убедиться, что у меня все включено в ifndef, чтобы защитить от этого, так что я оставил царапины на голове.
DXManager3D.obj: предупреждение LNK4006: "общественность: __thiscall Math :: Vector :: Vector (аннулируются)" (?? 0Vector @ Math @@ QAE @ XZ) уже определены в Render.obj; второе определение игнорируется
Что меня действительно смущает, так это то, что когда я создаю Render.lib отдельно от TestBed, который не должен связывать ничего, поскольку это статическая библиотека, не так ли? Я все еще получаю предупреждения о множественном символе. Если я создаю экземпляр DXManager3D, мои предупреждения станут ошибками.
Render.lib (DXManager3D.obj): ошибка LNK2005: "общественность: __thiscall Math :: Vector :: Vector (аннулируются)" (?? 0Vector @ Math @@ QAE @ XZ) уже определены в WinMain. obj
Да, у меня есть F1'd LNK4006 и LNK2005, а решения в MSDN для меня не работают. Извините, если этот вопрос был задан раньше, я не смог найти ничего твердого, чтобы помочь мне использовать функцию поиска.
Спасибо!
Все мои определения определены в заголовке вне определения класса. – 2009-04-04 19:24:30
Aha! Это проблема. Я дал вам возможное решение (ы). См. Мои примеры выше. – dirkgently
Сделайте все определения inline, следуйте последнему примеру для более длинных функций, а для более коротких - второму. Ура! – dirkgently