我一直在互联网上阅读有关此错误的内容,以及为什么会引起错误,但我在代码中找不到错误。
我有一个Inventory
类,它继承了GameObject
指针的列表:
#ifndef INVENTORY_H
#define INVENTORY_H
#include "GameObject.h"
#include <list>
template <class GameObject>
class Inventory : public std::list<GameObject*>
{
private:
public:
Inventory() : std::list<GameObject*>::list() {}
};
#endif
GameObject
课程如下所示:
class GameObject : public Updateable
{
private:
...
Inventory<GameObject*> m_inventory;
public:
...
void SetInventory(Inventory<GameObject*> inventory);
Inventory<GameObject*>& GetInventory();
};
然后我通过这种方法填充一个新的Inventory
对象:
Inventory<GameObject*>& GameInitializer::ConfigureItems(XMLElement* xmlGameObject) {
Inventory<GameObject*>* inv = new Inventory<GameObject*>();
...
while (currElement != NULL) {
GameObject* item = new GameObject();
// Configure all properties of the item
item->SetId(currElement->Attribute("id"));
item->SetPropertyHolder(ConfigureProperties(currElement));
item->SetName(item->GetPropertyHolder().GetProperty("NAME").As<string>());
// Add item to inventory
(*inv).push_back(&item);
currElement = currElement->NextSiblingElement();
}
return (*inv);
}
但是每当返回对此Inventory
对象的引用时,GameObject
类(id
,name
中的成员变量都无法从内存中读取:
答案 0 :(得分:3)
在你的第二个代码块中push_back()
指向一个局部变量的指针(即GameObject* item
)。它在返回时被破坏,并使IDE指出这个错误。
答案 1 :(得分:2)
我建议改变这个:
Inventory<GameObject*> m_inventory;
到此:
Inventory<GameObject> m_inventory;
因此它将是std::list<GameObject*>
而不是std::list<GameObject**>
。
将指针指向 - GameObject
元素存储似乎是多余的,只存储指向GameObject
的指针应该足够了,并使你的其他代码更简单(例如这一行:{{1 }})。
答案 2 :(得分:0)
我最近遇到了这个问题,这是由于我在函数顶部声明了变量,然后又对其进行了声明。