分类:
2010-04-29 09:56:32
class Tool class Knife : public Tool void Knife::DoSomething(Tool& t) int main() |
使用命令 g++ -o test test.cpp 编译, 报如下错误:
ccAnMgzN.o:test.cpp:(.text$_ZN4ToolC 2Ev[Tool::Tool()]+0x8): undefined reference to `vtable for Tool' collect2: ld returned 1 exit status shell returned 1 |
原因:Class Tool中的virtual function DoSomething未定义,导致编译器建立vbtl时找不到DoSomething的定义,本应报DoSomething未定义的error,但很多编译器实现报的是vbtl的问题。
解决办法:虚函数空定义或者pure virtual function
参考:
BTW:在Visio Studio 2003中,可以成功编译。g++和MS的compiler implementation还是有一定区别的。MS更灵活,g++更严格。不过,根据GNU C Compiler的风格,应该会有选项来给用户一定的灵活性。没尝过...