Undef引用构造函数中的vtable和非Q中的析构函数

时间:2011-07-16 13:23:22

标签: inheritance vtable virtual-destructor

我有一个基类GameObject,它目前是父Camera和SolidObject。 SolidObject父级玩家和GameMap。出于某种原因,我只是在GameMap的构造函数和析构函数中获得了对vtable的未定义引用。这是代码(我不会包括相机或播放器)。注意:GameObject和SolidObject在World.h中,因为它们很小并且需要连接。我只会包含与这些类和GameMap相关的内容。

我切换了继承,因此GameMap继承自GameObject而不是SolidObject,但它仍会导致相同的错误。

World.h

class GameObject
{
public:
    World* parent;
    unsigned int objID;

    virtual void step();
};

class SolidObject : public GameObject
{
public:
    float xpos, ypos, zpos;
    float xrot, yrot, zrot;
};

World.cpp

void GameObject::step()
{

}

GameMap.h

class GameMap : public GameObject
{
private:
    WFOBJ model;

public:
    GameMap(World* world, char* modelFile, char* textureFile);
    ~GameMap();

    void step();
    void setModel();
};

GameMap.cpp

void step()
{

}

GameMap::GameMap(World* world, char* modelFile, char* textureFile)
{
    model.loadFile(modelFile, textureFile);

    objID = world->addObject(this);
    parent = world;
}

GameMap::~GameMap()
{
    parent->removeObject(objID);
}

1 个答案:

答案 0 :(得分:0)

在GameMap.cpp中查看step()的定义 - 它缺少类名。它应该被声明为void GameMap::step()。该错误实际上应该提到无法找到step的定义,但as explained in the great C++ FAQ,您可能会收到此错误。