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();
}
我写了一个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();
}