【发布时间】:2018-01-25 00:05:25
【问题描述】:
我正在尝试编写一个基于文本的冒险游戏构建器。我有三个班级:Room、Object 和我的main 班级。在我的Room 类中,我有一个Objects 指针的(私有)向量:vector<Object*> objectsInRoom
这会跟踪每个房间中存储的所有Objects。我在Room 类中有一个名为objects() 的函数,当我在main 类中调用该向量时,它返回objectsInRooms。
vector<Object*> Room::objects() { return objectsInRoom; }
在我的main 类中,在我的函数pickUpObject() 中,我创建了一个名为roomObject. 的Objects 指针向量我在Room 类中调用objects() 并存储Objects在objectsInRoom 中(只能在Room 类中访问)在roomObject 中(可以在main 中的我的函数中访问)。我还有一个名为allObjects 的Objects 向量,它存储了我想从房间里拿起并随身携带的所有物品。它具有全球范围。
我想这样做,如果我在一个特定的房间里拿起一个物品,我把它添加到allObjects,删除roomObjects中指向那个元素的指针(以及指向那个的指针Room 类中的 objectsInRooms 中的元素)和项目本身。
我的pickUpObject 函数是:(Room* current 只是告诉我我在哪个房间,因此Objects 我有什么)
void pickUpObject(vector<Object>&allObjects, Room* current)
{
vector<Object*>roomObjects; int length; string name; char flag;
roomObjects = current->objects();
length = roomObjects.size();
bool repeat = true;
while (repeat)
{
if (length == 0)
{
cout << "There are no objects to pick up in " << current->name() << endl;
repeat = false;
}
else
{
cout << "There is a ";
for (int k = 0; k < roomObjects.size() - 1; k++)
{
cout << roomObjects[k]->getName();
if (length > 2)
cout << ", ";
}
if (length > 1)
cout << " and " << roomObjects[length - 1]->getName() << " here." << endl;
else
cout << roomObjects[length-1]->getName() << "." << endl;
cout << "What object do you want to pick up?" << endl;
cin >> name;
//this is where the deletion happens
for (int i = 0; i < length; i++)
if (name.compare(roomObjects[i]->getName()) == 0)
{
allObjects.push_back(*roomObjects[i]);
roomObjects.erase(roomObjects.begin() + i);
deleteVectorContent(roomObjects, i, i + 1);
}
cout << "roomObject size = " << roomObjects.size() << endl;
cout << "--------------------" << endl;
cout << "allObject size = " << allObjects.size() << endl;
for (int i = 0; i < allObjects.size(); i++)
cout << allObjects[i].getName() << endl;
for (int i = 0; i < roomObjects.size(); i++)
{
cout << roomObjects[i]->getName() << endl;
}
cout << "Do you want to pick up another object? (Y/N): ";
cin >> flag;
if (flag == 'N')
repeat = false;
}
}
}
我查看了 StackOverflow 上的各种帖子,试图解决我的困境。在main 中,我创建了一个名为deleteVectorContent 的方法来尝试删除指针。
void deleteVectorContent(vector<Object*> objectVector, int start, int stop)
{
for (int k = start; k < stop; k++)
delete objectVector[k];
objectVector.clear();
}
我还尝试使用“roomObjects.remove()”将项目本身从该房间中移除。然而,每当我编译时,我的编译器也会抛出一个异常。帮助将不胜感激。
附:此作业的链接是here。如果您向下滚动到“编程作业的额外学分”并转到第一个标记为“10 分”的项目,这就是我正在做的事情。非常感谢您的帮助!
【问题讨论】: