C ++读取字符串字符时出错

时间:2015-02-08 15:18:16

标签: c++ list templates pointers inheritance

我一直在互联网上阅读有关此错误的内容,以及为什么会引起错误,但我在代码中找不到错误。

我有一个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类(idname中的成员变量都无法从内存中读取:

enter image description here

3 个答案:

答案 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)

我最近遇到了这个问题,这是由于我在函数顶部声明了变量,然后又对其进行了声明。