Массив указателей на функции LNK2005 «уже определен» в .obj

Хорошо, небольшое введение в проблему: я работаю над механизмом рендеринга (компиляция в 32-битном режиме) в C ++ / DirectX11 в Visual Studio 2012 работает на Windows 7 — 64-битная ОС, и у меня есть странная ошибка связи, которая появляется в моем Entity класс ( Entity3D это как основной актер сцены).
Все мои ограничивающие классы тома наследуются от Shape3D класс. Каждая сущность имеет Shape3D* boundingVolume член в нем, который инициализируется для определенного типа фигуры во время инициализации.
При столкновении между двумя Shape3DЯ передаю им функцию — bool Intersect(Shape3D* a, Shape3D* b) Затем функция проверяет их типы (сфера/ * Box * / Независимо от), а тип представляет число, которое является индексом функции в массиве указателей на функции:

bool(*IntersectArray[4][4])(Shape3D* a, Shape3D* b) =
{
{
IntersectSphereSphere,
IntersectSphereBox,
IntersectSphereOrientedBox,
IntersectSphereFrustum,
},
{
IntersectBoxSphere,
IntersectBoxBox,
IntersectBoxOrientedBox,
IntersectBoxFrustum
},
{
IntersectOrientedBoxSphere,
IntersectOrientedBoxBox,
IntersectOrientedBoxOrientedBox,
IntersectOrientedBoxFrustum
},
{
IntersectFrustumSphere,
IntersectFrustumBox,
IntersectFrustumOrientedBox,
IntersectFrustumFrustum
}
};

Так что это как виртуальная рассылка. Хорошо, так InersectArray это массив функций (объявлен в Intersect.h), и это дает мне ошибку ссылки:

error LNK1169: one or more multiply defined symbols found
error LNK2005: "char (__cdecl*(* Engine::Collision::IntersectArray)[4])(class Engine::Collision::Shape3D *,class Engine::Collision::Shape3D *)" (?IntersectArray@Collision@Engine@@3PAY03P6ADPAVShape3D@12@0@ZA) already defined in Entity3D.obj
File Intersect.obj

Intersect.h является только включен в Entity3D.cpp, это не входит в Entity3D.h, ни в одном из заголовков, которые Entity3D.h включает в себя.Entity3D.cpp только включает Entity3D.h а также Intersect.h.Я почистил и перестроил, ошибка сохраняется.Intersect (Shape3D a, Shape3D * b) * вызывается только в одном методе Entity3D в Entity3D.cpp файл. В настоящее время в проекте нет других ошибок или предупреждений компиляции. Что еще может вызвать такую ​​проблему?

0

Решение

Исправлена ​​проблема, я просто перенес определение IntersectArray в Intersect.cpp файл, так как на данный момент это единственное место, где это нужно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]