2012-03-31 3 views

ответ

1

Если вы хотите построить new BrokenPart на предварительно распределенной памяти, где объект, который i указывает на хранится, вы можете использовать размещения нового оператора: new (&(*i)) BrokenPart();

проверить этот вопрос: What uses are there for "placement new"?

2

Вы не может этого сделать. Пули содержат Part s, а не Part*. Вы также не можете изменить адрес памяти объектов Part, хранящихся в вашем списке, вы можете изменить их содержимое.

Вы можете использовать список указателей:

std::list<Part*> bullets; 
/* ... */ 
*i = new BrokenPart(**i); 

Обратите внимание на два оператора derreference итератора один раз, чтобы получить Part указатель, а потом еще derreference его.

Как совет, я бы сказал, чтобы изменить ваш дизайн. Похоже, что класс Part может быть переработан с использованием state pattern, вы должны посмотреть на него.

3

Чтобы объяснить сообщение об ошибке: компилятор жалуется, что &(*i) = ... не имеет смысла: &(*i) является адресом и не может быть изменен.

Для исправления см. Ответ владельца.

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