Reference:
undefined reference to vtable for X
What is a C++ "Key Function" as described by gold?
Every polymorphic class requires a virtual table or vtable describing the type and its virtual functions. Whenever possible the vtable will only be generated and output in a single object file rather than generating the vtable in every object file which refers to the class (which might be hundreds of objects that include a header but don't actually use the class.)
The cross-platform C++ ABI states that the vtable will be output in the object file that contains the definition of the key function, which is defined as the first non-inline, non-pure, virtual function declared in the class.
If you do not provide a definition for the key function (or fail to link to the file providing the definition) then the linker will not be able to find the class' vtable.
If you do not provide a definition for the key function (or fail to link to the file providing the definition) then the linker will not be able to find the class' vtable.
class X {
public:
virtual ~X() = 0;
void f();
virtual void g() { }
virtual void h(); // defined inline out side of class.
virtual void i(); // <-- Key fuction.
virtual void j();
};
inline void X::h() { }
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.