undefined reference to typeinfo - C++ error message
There are some compiler and loader error messages that shout obviously as to their cause, but there are others that simply don't give the new user much of an indication as to what's really wrong. And most of those I get to know pretty quickly, so that I can whip around a room during a course, making suggestions to delegate to check for missing ; characters or double quotes, to check that they have used the right type of brackets for a list subscript and haven't unintentionally written a function call, etc.
Here's one of the more obscure messages from the Gnu C++ compiler - or rather from the loader:
g++ -o polygon shape.o circle.o square.o polygon.o
circle.o(.gnu.linkonce.r._ZTI6Circle+0x8): undefined reference to `typeinfo for Shape'
square.o(.gnu.linkonce.r._ZTI6Square+0x8): undefined reference to `typeinfo for Shape'
polygon.o(.gnu.linkonce.t._ZN5ShapeC2Ev+0x8): In function `Shape::Shape()':
: undefined reference to `vtable for Shape'
collect2: ld returned 1 exit status
And you can be scratching you head for hour over that one!
The error? shape.o contains a base class from which classes are derived in circle.o and square.o .. but virtual function(s) in shape's definition are missing null bodies.
The fix? You've got line(s) like
virtual float getarea() ;
that should read
virtual float getarea() {} ;
The complete (working) source code files for this example are available here
undefined reference to `vtable for`
最新推荐文章于 2024-08-27 19:35:15 发布
这篇博客讨论了C++编程中遇到的一个不明显的错误消息,即`undefined reference to `typeinfo`。该错误通常发生在编译链接阶段,由于基类缺少虚函数实现导致。解决方法是确保所有声明的虚函数都有对应的函数体。博客提供了详细的错误分析和修复方案,帮助程序员理解并解决这类问题。
摘要由CSDN通过智能技术生成