Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1958246
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

2010-04-29 09:56:32

 

class Tool
{
public:
    virtual void DoSomething(Tool& t);
};

class Knife : public Tool
{
public:
    virtual void DoSomething(Tool& t);
};

void Knife::DoSomething(Tool& t)
{}

int main()
{
    Tool* t = new Knife();
    return 0;
}

使用命令 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的风格,应该会有选项来给用户一定的灵活性。没尝过...

阅读(1954) | 评论(0) | 转发(0) |
0

上一篇:通信随笔1

下一篇:类声明中的Static

给主人留下些什么吧!~~