c++ - 我收到对 vtable 错误的 undefined reference

标签 c++ vtable

这是我在标题中的类(class)。

class AlarmPatterns
{
public:
   AlarmPatterns() {}

   virtual~AlarmPatterns();

   //alarm patterns
   enum class PATTERN_TYPES_E
   {
      BEEP_MODE,        //150
      IGN_BULBCHECK,    //160
      LOW_PRIO_REMIND,  //170
      DM1_RED,          //200
      HP_ALERT_5,       //210
      HP_ALERT_4,       //220
      HP_ALERT_3,       //230
      HP_ALERT_2,       //240
      HP_ALERT_1,       //250
      NUM_PATTERNS
   };

   static bool LoadPatternData(AP_S & pattern, const uint8_t id);

   static const AP_S Patterns[];
};

AP_S 是同一命名空间内但类外的 typedef 结构

这是一个基类,因为我们不是从任何其他类派生的

在我的 test.cpp 文件中我有:

AlarmPatterns * TestPattern;

void setup()
{
   TestPattern = new AlarmPatterns();
}

注释 TestPattern = new AlarmPatterns(); 结果没有错误

这里是错误

undefined reference to `vtable for Dragonfly::Alarm::AlarmPatterns'

因为我不可能遗漏任何基类的任何虚函数,所以我不明白我是如何得到这个错误的。

最佳答案

您正在向前声明一个析构函数,但您没有提供定义。

如果你想要一个空的析构函数,因为这是一个带有其他虚方法的基类,只需声明一个空的析构函数:

virtual ~AlarmPatterns() {} // Note the braces

关于c++ - 我收到对 vtable 错误的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735740/

相关文章:

c++ - 写入视频文件并同时播放

c++ - 动态地向一组中的一个对象发射信号

c++ - Qt 库中的 GUI 线程检测

C++11:具有对数求值深度的编译时数组

c++ - 虚拟异常类导致动态链接器错误

c++ - Win32 SendInput mousemove滞后和卡住

c++ - vptr 和 vtable 是从基类继承的吗?

c++ - 子类中的这种更改是否需要重新编译依赖于父类(super class)的代码?

c++ - 编译器关于 this 指针和虚函数的详细信息