Поэтому я пытаюсь создать небольшой 3D-движок в качестве упражнения на VC ++ 8.0. У меня есть статическая библиотека MathLib и статическая библиотека Render, которая связана с моим exe-файлом TestBed. Сейчас у Render есть два класса: Color и DXManager3D. Цвет включает в себя мой Vector.h от MathLib просто отлично, никаких проблем.
Во второй раз, когда я пытаюсь включить Vector.h в DXManager3D, он обрушивается на меня, говоря, что символ определен дважды, а второе определение игнорируется (предупреждение из lib). Я подумал, что, возможно, включение его дважды вызвало это, поэтому в качестве теста я удалил Vector.h из Color.h и оставил его в DXManager3D.h - та же проблема. Я проверил трижды, чтобы убедиться, что у меня все завернуто в ifndef для защиты от этого, поэтому я остаюсь почесывая голову.
DXManager3D.obj: предупреждение LNK4006: «public: __thiscall Math :: Vector :: Vector (void)» (?? 0Vector @ Math @@ QAE @ XZ) уже определено в Render.obj; второе определение игнорируется
Что меня действительно смущает, так это то, что когда я собираю Render.lib отдельно от TestBed, он не должен ничего связывать, так как это статическая библиотека, верно? Я все еще получаю предупреждения об определении нескольких символов. Если я создаю экземпляр DXManager3D в основном, мои предупреждения становятся ошибками.
Render.lib (DXManager3D.obj): ошибка LNK2005: «public: __thiscall Math :: Vector :: Vector (void)» (?? 0Vector @ Math @@ QAE @ XZ) уже определена в WinMain.obj
Да, у меня есть F1'd LNK4006 и LNK2005, и решения в MSDN у меня не работают.
Извините, если этот вопрос задавался ранее, я не смог найти ничего хорошего, чтобы помочь мне с помощью функции поиска.
Спасибо!