我有一个类,该类从具有纯虚函数的类继承。

现在,我需要添加另一个不需要某些方法的类。我有一个想法是不实现此方法,而不是在调用此方法时总是抛出异常,如以下示例所示:

#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:

10-08 16:12