C++:如何访问存储在多映射静态变量中的数据

C++: how get an access to data stored in the multimap static variable

我写了一个class,其中包含一个结构和一些可以与 multimap 一起使用的方法。 addItemToList 方法将在 multimap 中添加一个结构,saveListData 方法将其存储在二进制文件中:

class listData
{
public:
    struct ItemStruct
    {
        long int item_id;
        int ess_id;
        char item_type;
        char list_type;
        time_t add_date;
    };
    int addItemToList(long int item_id, char list_type, char item_type = '[=10=]', int ess_id = 0)
    {        
        ItemStruct *pAddingItem = new ItemStruct;
        pAddingItem->item_id = item_id;
        pAddingItem->list_type = list_type;
        pAddingItem->item_type = item_type;
        pAddingItem->ess_id = ess_id;
        pAddingItem->add_date = std::time(nullptr);
        typedef std::multimap<char, struct ItemStruct> ListDataMap;
        static ListDataMap container;
        container.insert(std::pair<char, struct ItemStruct>(list_type, *pAddingItem));
    return 0;
    }

    int saveListData()
    {
        // how can I access to data stored in the container static variable?
    return 0;
    }        
};

和下一个使用 class 的代码:

#include <ctime>
#include <iostream>
#include <map>
#include "lists.cpp"
using namespace std;

int main(int argc, char** argv)
{
    listData test;
    test.addItemToList(10, 's', 'm', 1555);
    test.addItemToList(10, 'c', 'm', 1558);

    test.saveListData();
}

如何访问存储在容器静态变量中的数据?

在您的代码中,您已在方法 addItemToList 的本地范围内声明了多重映射,而不是在 class 范围内。当您想在 class 的各种方法中访问它时,您必须在 class 范围内声明和定义它。

此外,我已经调整了您的 addItemToList 实现的内容以避免内存泄漏。

为简单起见,我将所有内容都放在一个文件中:

#include <ctime>
#include <iostream>
#include <map>
using namespace std;

class listData
{
    private:
        struct ItemStruct
        {
            long int item_id;
            int ess_id;
            char item_type;
            char list_type;
            time_t add_date;
        };

        typedef std::multimap<char, struct ItemStruct> ListDataMap;
        static ListDataMap container; // multimap declaration

    public:
        int addItemToList(long int item_id, char list_type, char item_type = '[=10=]', int ess_id = 0)
        {        
            ItemStruct pAddingItem;
            pAddingItem.item_id = item_id;
            pAddingItem.list_type = list_type;
            pAddingItem.item_type = item_type;
            pAddingItem.ess_id = ess_id;
            pAddingItem.add_date = std::time(nullptr);
            container.insert(std::pair<char, struct ItemStruct>(list_type, pAddingItem));
            return 0;
        }

        int saveListData()
        {
            // use container here
            // container.<whatever-method>
            return 0;
        }        
};

listData::ListDataMap listData::container; // multimap definition

int main(int argc, char** argv)
{
    listData test;
    test.addItemToList(10, 's', 'm', 1555);
    test.addItemToList(10, 'c', 'm', 1558);

    test.saveListData();
}