Как поместить дочерний класс в контейнер 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'
Но этой ошибки нет в списке проблем. Почему это происходит, что это значит, как это исправить?