我有一个班级类型的数组" Room"。 Room有两个构造函数,默认和自定义。我想在初始化Room数组的元素时调用特定的构造函数。默认或自定义都不起作用。我收到此错误:
没有操作员" ="匹配这些操作数,操作数类型是Room = Room *
这是我的代码:
btw房间是房间指针类型
void RoomManager::createRooms()
{
rooms = new Room[numOfRooms];
for (int i = 0; i < numOfRooms; i++)
{
rooms[i] = new Room();
}
}`
我应该怎么做?
由于
答案 0 :(得分:0)
首先,没有理由在你的循环中调用默认构造函数,c ++在分配数组时已经为你做了。 但是,如果要创建数组并使用自定义构造函数调用初始化其元素,则可以使用placement new operator
#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();
}
}
如果您使用placement new,则必须在程序结束时手动调用析构函数:
for (int i = 0; i < numOfRooms; i++)
{
rooms[i].~Room();
}
operator delete[](rooms);
答案 1 :(得分:0)
错误原因:
rooms
是Room
的数组。对rooms
OP的每个元素分配指向Room
,Room *
的指针。 Room
和Room *
不兼容,因此编译器无法为该分配生成代码。
解决方案:
幸运的是,根本不需要任务。 rooms = new Room[numOfRooms]
分配并默认为您构建了所有房间。
void RoomManager::createRooms()
{
rooms = new Room[numOfRooms];
}
另外,您想以这种方式分配房间是值得怀疑的。设置numOfRooms
后,立即调用allocate并为自己保存额外的功能。
更好的方法是考虑使用std::vector
。