именующий требуются в качестве левого операнда назначенияименующий требуется в качестве левого операнда Ошибки присваивания
Я получаю вышеуказанную ошибку, когда я пытаюсь скомпилировать этот кусок кода:
Декларация bullets
:
Куда я иду не так?
именующий требуются в качестве левого операнда назначенияименующий требуется в качестве левого операнда Ошибки присваивания
Я получаю вышеуказанную ошибку, когда я пытаюсь скомпилировать этот кусок кода:
Декларация bullets
:
Куда я иду не так?
Если вы хотите построить new BrokenPart
на предварительно распределенной памяти, где объект, который i
указывает на хранится, вы можете использовать размещения нового оператора: new (&(*i)) BrokenPart();
проверить этот вопрос: What uses are there for "placement new"?
Вы не может этого сделать. Пули содержат Part
s, а не Part*
. Вы также не можете изменить адрес памяти объектов Part
, хранящихся в вашем списке, вы можете изменить их содержимое.
Вы можете использовать список указателей:
std::list<Part*> bullets;
/* ... */
*i = new BrokenPart(**i);
Обратите внимание на два оператора derreference итератора один раз, чтобы получить Part
указатель, а потом еще derreference его.
Как совет, я бы сказал, чтобы изменить ваш дизайн. Похоже, что класс Part
может быть переработан с использованием state pattern, вы должны посмотреть на него.
Чтобы объяснить сообщение об ошибке: компилятор жалуется, что &(*i) = ...
не имеет смысла: &(*i)
является адресом и не может быть изменен.
Для исправления см. Ответ владельца.