Здравствуйте! Написал достаточно простой код:
class bar1 { public: bar1() { foo(); } virtual void foo() = 0; }; class bar2 : bar1 { public: bar2() {} void foo() {} }; int main() { bar2 b; return 0; }
Но он выдаёт не понятную ошибку:
LNK2019 ссылка на неразрешенный внешний символ “public: virtual void __thiscall bar1::start(void)” (?start@bar1@@UAEXXZ) в функции “public: __thiscall bar1::bar1(void)” (??0bar1@@QAE@XZ)
Причем, если убрать строчку с вызовом виртуального метода foo, то все работает. Я догадываюсь, в чем здесь дело. Возможно, когда bar2 наследуется от bar1, вызывается конструктор bar1 и в нем вызывается еще не определенный метод foo, т.е. метод, еще не имеющий тела. Так ли это? И как это исправить?