Как поместить дочерний класс в контейнер map с указателем на базовый класс?

Проблема в следующем. Есть родительский класс и дочерний класс.

class Parent {
public:
    virtual ~Parent();
    virtual void execute() = 0;
protected:
    Parent(DataStruct *data) : data(data) {}
    DataStruct *data;
};

class Derived1 : public Parent {
public:
    Derived1(DataStruct *data, string str) : Parent(data), str(str) {}
    void execute();
private:
    string str;
};

Есть контейнер map с типами string и Parent*. Я пытаюсь положить в него указатель на дочерний класс.

map <string, Parent*> myMap;
myMap["derived-1"] = new Derived1(myData, myString);

При компиляции выдается ошибка:

in function `Derived1::Derived1(DataStruct*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
undefined reference to `Parent::~Parent()'
undefined reference to `vtable for Derived1'
undefined reference to `vtable for Parent'

Но этой ошибки нет в списке проблем. Почему это происходит, что это значит, как это исправить?


Ответы (0 шт):