Простите за то, что я констатировал очевидное кровотечение, но ... Я видел, как подобные вещи происходили много раз раньше, когда файлы объектов (.o) и заголовков (.h) не синхронизированы. Особенно в отношении виртуальных методов.
Учтите: объектный файл скомпилирован с заголовком:
class Foo { virtual void f(); };
Но тогда заголовок меняется на:
class Foo { virtual void g(); virtual void f(); };
А для следующего объектного файла предположения компилятора о том, где f () находится в vtable класса, неверны.
Часто простая перекомпиляция мира (всего!) Поможет.