在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:
undefined reference to `__cxa_pure_virtual'
我找到了 this document其中指出:
The
__cxa_pure_virtual
function is an error handler that is invoked when a pure virtual function is called.If you are writing a C++ application that has pure virtual functions you must supply your own
__cxa_pure_virtual
error handler function. For example:
extern "C" void __cxa_pure_virtual() { while (1); }
按照建议定义此函数可修复错误,但我想知道:
- 这个功能的目的是什么,
- 为什么我需要自己定义它
- 为什么可以将其编码为无限循环?
最佳答案
如果在程序运行时的任何地方创建了一个未填充虚函数指针的对象,并且当调用相应的函数时,您将调用“纯虚函数”。
您描述的处理程序应该在您的开发环境附带的默认库中定义。如果您碰巧省略了默认库,您会发现此处理程序未定义:链接器看到一个声明,但没有定义。这就是您需要提供自己的版本的时候。
无限循环是可以接受的,因为它是一个“响亮”的错误:您软件的用户会立即注意到它。任何其他“大声”实现也是可以接受的。
关于c++ - __cxa_pure_virtual 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016303/