错误LNK2019 - 抽象类中的虚拟析构函数

时间:2010-12-07 18:20:50

标签: c++ lnk2019 virtual-destructor

  

可能重复:
  Pure virtual destructor in C++

我有两个类:抽象的“Game”类和派生的“TestGame”类。 TestGame中的所有函数都是单独实现的(为了让它编译)。我只收到一个错误:

  

TestGame.obj:错误LNK2019:   未解决的外部符号“public:   virtual __thiscall Game ::〜Game(void)“   (?? 1Game @@ UAE @ XZ)参考了   功能“public:virtual __thiscall   TestGame ::〜TestGame(无效)”   (?? 1TestGame @@ @ UAE XZ)

以下是我的课程定义:

class Game
{
public:
    virtual ~Game(void) = 0;

    virtual bool Initialize() = 0;
    virtual bool LoadContent() = 0;
    virtual void Update() = 0;
    virtual void Draw() = 0;
};

class TestGame: public Game
{
public:
    TestGame(void);
    virtual ~TestGame(void);

    virtual bool Initialize();
    virtual bool LoadContent();
    virtual void Update();
    virtual void Draw();
};

我尝试了几件事,但我觉得我可能遗漏了一些关于抽象和派生类如何运作的基本原理。

1 个答案:

答案 0 :(得分:10)

实际上你需要为基类定义析构函数,即使它是纯虚函数,因为它会在派生类被销毁时被调用。

virtual ~Game() { /* Empty implementation */ }

纯虚拟的= 0不是必需的,因为你有其他纯虚函数可以使你的类抽象化。