这是我的班级标题。
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'
由于我无法从任何基类中遗漏任何虚函数,我不知道我是如何得到这个错误的。
答案 0 :(得分:1)
您正在声明一个析构函数,但您没有提供定义。
如果你想要一个空的析构函数,因为这是一个带有其他虚方法的基类,只需要声明一个空的析构函数:
virtual ~AlarmPatterns() {} // Note the braces
答案 1 :(得分:0)
如果您错过了第一个虚拟函数的定义,就会发生这种情况。
在你的情况下,~AlarmPatterns()
..添加一个实现,所有这些都可以正常工作。