vtabletest.h
class myTest
{
public:
myTest(){};
virtual ~myTest(){};
virtual void run()=0;
};
namespace Test{
class deMyTest : myTest
{
public:
deMyTest(){};
//virtual ~deMyTest(){};
virtual void run();
};
}
vtabletest.cc
#include "vtabletest.h"
using namespace Test;
//void deMyTest::run(){};
main()
{
deMyTest dmt;
return 0;
}
测试:
1、注释掉红色标注代码
[jack@hyt1 vtabletest]$ g++ -o vtabletest vtabletest.cc
/tmp/ccsH3PKg.o: In function `deMyTest::deMyTest()':
vtabletest.cc:(.text._ZN8deMyTestC2Ev[_ZN8deMyTestC5Ev]+0x1f): undefined reference to `vtable for deMyTest'
/tmp/ccsH3PKg.o: In function `deMyTest::~deMyTest()':
vtabletest.cc:(.text._ZN8deMyTestD2Ev[_ZN8deMyTestD5Ev]+0x13): undefined reference to `vtable for deMyTest'
collect2: ld returned 1 exit status
分析原因:
基类定义的(纯)虚函数,子类声明后,要定义实现,即使空实现。
如果没有定义,链接时创建vtable 是不能关联到正确的object。导致上述错误。
2、去掉注释,重新编译
[jack@hyt1 vtabletest]$ g++ -o vtabletest vtabletest.cc
没有再报错误,说明修改正确。
524

被折叠的 条评论
为什么被折叠?



