undefined reference to xxxxx like mytype::constructor

来源:互联网 发布:淘宝店铺粉丝机器 编辑:程序博客网 时间:2024/06/07 19:59

The common error message in the GCC complaint compiler, will point to the common issue during the compile...

 

 

so if you get this type of issue , there an very easy way to handle on this.

 

 

I check in the think in  C++, about chapter 15,polymorphism &virtual functions, in section virtual function &constructor

 

I got an interesting guide line:

 

As a guideline, any time you have a virtual function in a class, you
should immediately add a virtual destructor (even if it does
nothing). This way, you ensure against any surprises later.

'

compair with the GCC guideline

http://gcc.gnu.org/faq.html#vtables

When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them

The ISO C++ Standard specifies that all virtual methods of a classthat are not pure-virtual must be defined, but does not require anydiagnostic for violations of this rule [class.virtual]/8. Based onthis assumption, GCC will only emit the implicitly definedconstructors, the assignment operator, the destructor and the virtualtable of a class in the translation unit that defines its first suchnon-inline method.

Therefore, if you fail to define this particular method, the linkermay complain about the lack of definitions for apparently unrelatedsymbols. Unfortunately, in order to improve this error message, itmight be necessary to change the linker, and this can't always bedone.

The solution is to ensure that all virtual methods that are notpure are defined. Note that a destructor must be defined even if itis declared pure-virtual [class.dtor]/7.

 

 

solution is:

 

add the destruction to your class ,you can easy to find which function have been set as virtual not by your part of code, but the message or event macro.

 

why the GCC report as the undefined issue, because before to use the constructor, the compiler will check the vtable, if the object linked vtable's function not defined in your class, the complication of you class will faied by undefied reference to xxxxx...

 

this type issue can be easy found in a popular framework like wxwidget,MFC....

 

 

 

 

原创粉丝点击