У меня очень странная проблема:
Я использую один из моих базовых классов: IEventlistener (), который реализуется многими другими классами.Большую часть времени система работает.Но теперь возникла очень странная проблема.
Как только класс (CGUIService) реализует интерфейс, один метод (VGetListenerName) работает так, как ожидалось, а другой (VHandleMessage) получает чистый вызов, когда я проверяю стек вызовов и я неЯ не понимаю, почему -.- (кажется, что vtable перезаписывается или выходит за пределы ...)
Я сделал снимок экрана, чтобы вы могли видеть переменную перед вызовом VHandleMessage, что, конечно, приводит котладочное утверждение R6025 - чисто виртуальный вызов функции, потому что каким-то образом реализованный метод не введен в виртуальную таблицу IEventlistener ().
Highres: www.fantasyhaze.com/cb/Error_purecall.png
Я надеюсь, что кто-то может дать мне подсказку:)
Edit1.)
Поэтому, чтобы объяснить это немного подробнее, я создал новый скриншот, который показывает тот же процесс,но теперь я включил еще 2 виртуальные функции, которые не являются чистыми и имеют реализацию (из-за нехватки времени у меня нет времени на реализацию всех встреченныхснова в каждом классе, который использует интерфейс)
Фиолетовые - новые, Красный - тот, который не работает. Оранжевый - метод, который был там прежде, и который работал и все еще работает.
С левой стороны видно, что VGetListenerName, VHandleEvent1, VHandleEvent2 работают (точка отладки + текущая позиция) и что эти 3 находятся в vtable ... но не важная (красная)
высокое разрешение: www.fantasyhaze.com/cb/Error_purecall2.png
Edit2.)
РЕШЕНИЕ:
Основная проблема заключалась в том, что CGUIService наследуетиз IBase.Чтобы получить доступ к Сервису, я использовал Сервисный локатор, который хранит каждый сервис.Поэтому он выполняет static_cast в Instance Getters Service :: GetServiceInstance (), а static_cast также выполнялся для сохранения сервиса как IBase.Но IEventListener не был реализован в IBase, кроме того, Служба была возвращена в IBase без IEventListener, и vtable не был в порядке.Теперь IBase реализует IEventListener, и он работает, потому что static_cast правильно выполняет IEventListener:)
Спасибо за подсказки, ребята :)