Для начала, если вы хотите хранить полиморфный объект в стандартном контейнере C ++, вы должны хранить указатель на объект, а не объект базового класса. Если вы этого не сделаете, вы столкнетесь с проблемами нарезки объектов. Кроме того, сделайте себе одолжение и оберните указатель в умный указатель, чтобы предотвратить утечку ресурсов - я бы рекомендовал boost :: shared_ptr <>.
Учитывая, что вы не показали нам код для Message, мы можем только догадываться, в чем проблема. Поскольку это относится к vtable, есть вероятность, что:
- Вы не объявили ни одного члена класса Message как
virtual
. Было бы неплохо начать с деструктора
- Вы забыли связать объектный файл, который содержит скомпилированный код для сообщения
Кстати, создание дополнительной ссылки в sendMessage()
не является обязательным, и IMHO не совсем помогает читабельности. Просто отмените указатель msg в вашем вызове на push_back ().