我有一个类,该类从具有纯虚函数的类继承。
现在,我需要添加另一个不需要某些方法的类。我有一个想法是不实现此方法,而不是在调用此方法时总是抛出异常,如以下示例所示:
#include <iostream>
class ibase {
public:
virtual void foo() = 0;
virtual void boo() = 0;
};
class base1 : public ibase {
public:
virtual void foo(){ std::cout<<"base1::foo"<<std::endl; }
virtual void boo(){ std::cout<<"base1::boo"<<std::endl; }
};
class base2 : public ibase {
public:
virtual void foo() { std::cout<<"base2::foo"<<std::endl; }
virtual void boo();
};
int main()
{
ibase *inst1 = new base1;
ibase *inst2 = new base2;
inst1->foo();
inst1->boo();
inst2->foo();
}
但是当我尝试使用下一个编译器选项进行编译时:
g++ dfg.cpp -ansi -pedantic -Wall
这个例子产生了下一个输出(使用g++ 4.3.0):
/tmp/ccv6VUzm.o: In function `base2::base2()':
dfg.cpp:(.text._ZN5base2C1Ev[base2::base2()]+0x16): undefined reference to `vtable for base2'
collect2: ld returned 1 exit status
有人可以解释为什么链接失败吗?不调用方法boo()。
最佳答案
base2
的vtable已创建-您使用base2。 vtable引用了boo()
-因此您需要对其进行定义。
10.3 / 8: