我得到一个未定义的引用vtable错误

时间:2015-02-26 06:18:11

标签: c++ vtable

这是我的班级标题。

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'

由于我无法从任何基类中遗漏任何虚函数,我不知道我是如何得到这个错误的。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

如果您错过了第一个虚拟函数的定义,就会发生这种情况。

在你的情况下,~AlarmPatterns() ..添加一个实现,所有这些都可以正常工作。