LNK2005 .obj 中的函数指针数组"already defined"



Ok一点介绍到这个问题:我在 c++/DirectX11Visual Studio 2012上运行在Windows 7 - 64位操作系统的渲染引擎(编译在32位模式)上工作,我有一个奇怪的链接错误,出现在我的Entity类(Entity3D就像场景的基本演员)。
我所有的边界体类都继承自一个Shape3D类。每个实体都有一个Shape3D* boundingVolume成员,在初始化时初始化为特定的形状类型。
当两个Shape3D s之间发生碰撞时,我通过一个函数- bool Intersect(Shape3D* a, Shape3D* b) 该函数然后检查它们的类型(Sphere/*Box*/Whatever),该类型表示一个数字,该数字是函数指针数组中函数的索引:

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.hIntersect.h。我清理和重建,错误仍然存在。Intersect(Shape3D a, Shape3D* b)*仅在Entity3D.cpp文件中Entity3D的一个方法中调用。项目中当前没有其他编译错误或警告。还有什么能引起这样的问题呢?

修复了这个问题,我只是在Intersect.cpp文件中移动了IntersectArray的定义,因为现在这是唯一需要的地方。

相关内容

  • 没有找到相关文章

最新更新