【发布时间】:2019-09-08 05:46:08
【问题描述】:
当接口包含纯虚方法时,建议使用虚析构函数。例如,我有这个代码:
模板 A类{ 受保护: 字符缓冲区[大小]; 民众: 虚拟无效方法()= 0; A() = 默认值; 虚拟〜A()=默认值; }; 模板 B类:公共A { 民众: 无效方法()覆盖; B() = 默认 ~B() = 默认值; }; int main() { 乙乙; b.方法(); }但是当我尝试使用 g++ 为 Arduino Due 编译时,我收到以下错误:
main.cpp:(.text._ZN4r2d29robot_arm22uarm_gcode_generator_cILj100EED0Ev[_ZN4r2d29robot_arm22uarm_gcode_generator_cILj100EED5Ev]+0x6):未定义对“操作符删除(void*, unsigned int)”的引用但是,当我从 A 中完全删除析构函数时,它会删除错误,但这不会导致 Undifed Behaviour 吗?另外,当我从 A 的析构函数中删除 virtual 关键字时,它会给我同样的错误消息。
【问题讨论】:
-
您是否链接到 C++ 标准库的实现? stackoverflow.com/q/7015285/1116364
-
请注意,如果我只是将您的代码复制并粘贴到 Arduino Web 编辑器中(修正错别字后),它在那里编译得很好……
标签: c++