在使用 avr-gcc 编译时,我遇到了如下链接器错误:
undefined reference to `__cxa_pure_virtual'
我发现了其中指出:
The __cxa_pure_virtual
function 是一个错误处理程序,在调用纯虚函数时调用。
如果您正在编写具有纯虚函数的 C++ 应用程序,则必须提供自己的__cxa_pure_virtual
错误处理函数。例如:
extern "C" void __cxa_pure_virtual() { while (1); }
按照建议定义此函数可以修复错误,但我想知道:
- 这个函数的目的是什么,
- 为什么我需要自己定义它以及
- 为什么可以将其编码为无限循环?
如果在程序运行时的任何地方创建了一个对象,但未填充虚函数指针,并且当调用相应的函数时,您将调用“纯虚函数”。
您描述的处理程序应该在您的开发环境附带的默认库中定义。如果你碰巧省略了默认库,你会发现这个处理程序未定义:链接器看到一个声明,但没有定义。这时候你就需要提供你自己的版本。
无限循环是可以接受的,因为它是一个“响亮的”错误:软件的用户会立即注意到它。任何其他“大声”的实现也是可以接受的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)