Не могу создать новый класс из элемента указателя в массиве

У меня есть массив моего класса типа «Комната». Есть два конструктора для Room, по умолчанию и custom. Я хочу вызвать конкретный конструктор при инициализации элементов моего массива Room. Ни по умолчанию, ни на заказ не работает. Я получаю эту ошибку:

Ни один оператор «=» не соответствует этим операндам, типы операндов: Room = Room *

Вот мой код:

кстати номера указатель номера

void RoomManager::createRooms()
{
rooms = new Room[numOfRooms];

for (int i = 0; i < numOfRooms; i++)
{
rooms[i] = new Room();
}
}`

Как я должен идти об этом?

Спасибо

0

Решение

Во-первых, нет причин вызывать конструктор по умолчанию в вашем цикле, c ++ уже сделал это для вас при выделении массива.
Но если вы хотите создать массив и инициализировать его элементы с помощью вызова пользовательского конструктора, вы можете использовать оператор размещения new

#include <new>

// ...

void RoomManager::createRooms()
{
rooms = static_cast<Room*>(operator new[](numOfRooms * sizeof(Room)));

for (int i = 0; i < numOfRooms; i++)
{
new &(rooms[i]) Room();
}
}

И если вы используете размещение новых, вы должны вручную вызвать деструктор в конце программы:

    for (int i = 0; i < numOfRooms; i++)
{
rooms[i].~Room();
}
operator delete[](rooms);
0

Другие решения

Причина ошибки:

rooms это массив Room, Для каждого элемента roomsОП назначает указатель на Room, Room *, Room а также Room * несовместимы, поэтому он не может сгенерировать код для назначения.

Решение:

К счастью, нет необходимости в назначении вообще. rooms = new Room[numOfRooms] выделены и по умолчанию построены все ваши комнаты для вас.

void RoomManager::createRooms()
{
rooms = new Room[numOfRooms];
}

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

Еще лучший способ — рассмотреть возможность использования std::vector.

0