Когда вы звоните по этой линии:
Person* persons = new Person[4];
Тогда это уже четыре человека. Вам не нужна следующая строка:
persons[i] = new Person();
Просто удали эту строку. Он возвращает Person*
, который нельзя присвоить persons[i]
, что относится к фактическому Person
(а не к указателю). Но так как вы уже сделали четыре человека в первой строке, вам не нужна эта строка вообще.
Однако вы должны удалить людей, когда закончите:
delete[] persons;