0

我有一个班级类型“房间”的数组。Room 有两个构造函数,一个默认的和一个自定义的。我想在初始化 Room 数组的元素时调用特定的构造函数。默认或自定义都不起作用。我收到此错误:

没有操作符“=”匹配这些操作数,操作数类型是 Room = Room*

这是我的代码:

顺便说一句,房间是房间指针类型

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

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

我该怎么办?

谢谢

4

2 回答 2

0

错误原因:

rooms是一个数组Room。给 OP 的每个元素rooms分配一个指向Room,的指针Room *Room并且Room *不兼容,因此他的编译器无法为分配生成代码。

解决方案:

幸运的是,根本不需要分配。rooms = new Room[numOfRooms]分配并默认为您建造所有房间。

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

此外,您想以这种方式分配房间是值得怀疑的。numOfRooms设置后,您会立即调用 allocate 并为自己节省一个额外的功能。

更好的方法是考虑使用std::vector.

于 2016-03-13T06:17:23.777 回答
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);
于 2016-03-13T06:03:57.673 回答