0

クラスタイプ「ルーム」の配列があります。Room には、デフォルトとカスタムの 2 つのコンストラクターがあります。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の配列ですRoomroomsOPの各要素に、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 に答える