派生类和虚函数的链接器错误

时间:2015-08-12 05:24:35

标签: c++ linker

以下代码会产生链接器错误

//baseClass.h
class baseClass
{
   virtual void update(InputManager& input);
}

//baseClass.cpp
//defines update

//derivedClass.h
class derivedClass : public baseClass
{
   void update(InputManager& input);
}

//derivedClass.cpp
//defines update

错误:

Undefined symbols for architecture x86_64:
"derivedClass::derivedClass(float, float)", referenced from:
  _main in main.o

但是下面的代码编译得很好:

//baseClass.h
class baseClass
{
   virtual void update(InputManager& input);
}

//baseClass.cpp
//defines update

//derivedClass.h
class derivedClass : public baseClass
{
   void update(InputManager& input){}
}

这是为什么?为什么我不能在类定义之外定义derivedClass的更新函数?

1 个答案:

答案 0 :(得分:0)

我从你的解释中理解的是你没有提供功能体void update(InputManager& input); 在派生类中。你必须提供身体,因为你重写了它,在被覆盖的函数体中做一些事情。 正如您提供的第二个代码剪切它正在编译正常,因为您提供了函数体(至少为空,它不能为空,但对于编译器,它可以)。