У меня есть класс, который наследуется от класса с чисто виртуальными функциями.
Теперь мне нужно добавить другой класс, который не нуждается в каком-либо методе.У меня появилась идея не реализовывать этот метод, вместо того, чтобы всегда вызывать исключение при вызове этого метода, как в следующем примере:
#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 () не вызывается.