0

У меня есть карта указателей базового класса, и мне нужно применить функцию класса к отображаемым данным.Как применить функцию к указателю базового класса с карты?

Я имею дело с фигурами, которые пользователь вводит, а затем имеет возможность манипулировать ими (переводить, вращать ...). У меня есть функции, которые управляют фигурами, а фигуры хранятся на карте.

Я борется с доступом и манипулированием отображаемыми фигурами.

У меня есть следующий код;

polygon * T; 
map<string, polygon*> shape_map; 
new_shape = Trans + user_input; // adds Tranaslated to the key 

cout << "ID " << new_shape << " = " << endl; // ouput the key witch also id's the shape 
T = shape_map[user_input]->translate(matrix(Xtrans, Ytrans)); 
T->printshape(); 

Когда я запускаю мой код программа останавливается как раз перед он должен напечатать форму, и когда я отладки он выделяет строку в моей функции перевода, но я уверен, что мой перевод функция хорошо, как я испытал это раньше.

Я думаю, проблема в том, как я называю функции, но я не уверен.

Любая помощь будет замечательной!

+1

Я не вижу, где вы разместили new_shape на карте. Я предполагаю, что вы ожидаете, что shape_map [user_input] вернет new_shape. –

+0

Да. Я хочу избежать добавления новой переведенной формы в shape_map, поскольку я хотел бы показать ее пользователю, а затем спросить, хотят ли они сохранить форму. – Peter

+0

Функция translate возвращает тип того, на что он действует (типы фигур являются производными классами из многоугольника, который является абстрактным базовым классом). – Peter

ответ

0

Если в словаре форм нет слова, хранящегося под ключом, который находится в user_input, форма [user_input] вернет значение null. Предполагая, что перевод не является виртуальной функцией, программа будет сбой при переводе доступа «это». Если он виртуальный, он будет сбой при попытке перевести.

Когда ключ не найден, карта построит new <T>(), но в вашем случае T - это просто указатель и the default constructor for a pointer sets it to null.

Смежные вопросы