C++ 奇怪的boost无序映射错误
我已经有了3-4张无序的带有boost的_地图,而且都很好。 现在我想再做一次,但我从地图上得到了错误的输出 结构:C++ 奇怪的boost无序映射错误,c++,boost,C++,Boost,我已经有了3-4张无序的带有boost的_地图,而且都很好。 现在我想再做一次,但我从地图上得到了错误的输出 结构: struct sQUICK_SLOT_PROFILE { TBLIDX tblidx; BYTE bySlot; BYTE byType; HOBJECT hItem; }; 职能: sQUICK_SLOT_PROFILE* GetQuickSlotSkillDataFromList(BYTE SlotIndex); void
struct sQUICK_SLOT_PROFILE
{
TBLIDX tblidx;
BYTE bySlot;
BYTE byType;
HOBJECT hItem;
};
职能:
sQUICK_SLOT_PROFILE* GetQuickSlotSkillDataFromList(BYTE SlotIndex);
void AddQuickSlotSkillDataToMyList(BYTE SlotIndex, sQUICK_SLOT_PROFILE* skilldata);
boost::unordered_map<BYTE, sQUICK_SLOT_PROFILE*> p_QuickSlotSkillData;
添加到地图:
res->asQuickSlotData[slotID].tblidx = pSkillData->tblidx;
res->asQuickSlotData[slotID].bySlot = i;
res->asQuickSlotData[slotID].byType = (pSkillData->bySkill_Class==NTL_SKILL_CLASS_HTB?QUICK_SLOT_TYPE_HTB_SKILL:QUICK_SLOT_TYPE_SKILL);
res->asQuickSlotData[slotID].hItem = 0;
pPlayer->AddQuickSlotSkillDataToMyList(slotID, res->asQuickSlotData);
AddQuickSlotSkillDataToMyList函数:
void PlayerInfos::AddQuickSlotSkillDataToMyList(BYTE SlotIndex, sQUICK_SLOT_PROFILE* skilldata)
{
printf("ADD DATA %d %d %d %d %d \n", SlotIndex, skilldata->bySlot, skilldata->byType, skilldata->hItem, skilldata->tblidx);
p_QuickSlotSkillData.insert(make_pair(SlotIndex, skilldata));
}
sQUICK_SLOT_PROFILE* PlayerInfos::GetQuickSlotSkillDataFromList(BYTE SlotIndex)
{
itertype(p_QuickSlotSkillData) it = p_QuickSlotSkillData.find(SlotIndex);
if (p_QuickSlotSkillData.end() == it){
printf("error \n");
return 0;
}
sQUICK_SLOT_PROFILE* quickslot = it->second;
if (quickslot == NULL) {
printf(error 2 \n");
return 0;
}
printf("FOUND DATA %d %d %d %d %d \n", SlotIndex, quickslot->bySlot, quickslot->byType, quickslot->hItem, quickslot->tblidx);
return quickslot;
}
现在使用get data函数:
void PlayerInfos::AddQuickSlotSkillDataToMyList(BYTE SlotIndex, sQUICK_SLOT_PROFILE* skilldata)
{
printf("ADD DATA %d %d %d %d %d \n", SlotIndex, skilldata->bySlot, skilldata->byType, skilldata->hItem, skilldata->tblidx);
p_QuickSlotSkillData.insert(make_pair(SlotIndex, skilldata));
}
sQUICK_SLOT_PROFILE* PlayerInfos::GetQuickSlotSkillDataFromList(BYTE SlotIndex)
{
itertype(p_QuickSlotSkillData) it = p_QuickSlotSkillData.find(SlotIndex);
if (p_QuickSlotSkillData.end() == it){
printf("error \n");
return 0;
}
sQUICK_SLOT_PROFILE* quickslot = it->second;
if (quickslot == NULL) {
printf(error 2 \n");
return 0;
}
printf("FOUND DATA %d %d %d %d %d \n", SlotIndex, quickslot->bySlot, quickslot->byType, quickslot->hItem, quickslot->tblidx);
return quickslot;
}
查看printf的图像:
现在,正如您所看到的,它将正确的数据添加到地图中,但输出是垃圾
怎么了?我不明白。我已经坐了3个小时了
找到了一个解决方案:
void PlayerInfos::AddQuickSlotSkillDataToMyList(BYTE SlotIndex, sQUICK_SLOT_PROFILE* skilldata)
{
printf("ADD DATA %d %d %d %d %d \n", SlotIndex, skilldata->bySlot, skilldata->byType, skilldata->hItem, skilldata->tblidx);
sQUICK_SLOT_PROFILE* rofl = new sQUICK_SLOT_PROFILE;
rofl->bySlot = skilldata->bySlot;
rofl->byType = skilldata->byType;
rofl->hItem = skilldata->hItem;
rofl->tblidx = skilldata->tblidx;
p_QuickSlotSkillData.insert(make_pair(SlotIndex, rofl));
// delete rofl;
}
sQUICK\u SLOT\u PROFILE*quickslot=it->second;更改此行->sQUICK\u SLOT\u PROFILE*quickslot=&it->second;谢谢尝试但获取错误无法从“sQUICK\u SLOT\u PROFILE**”转换为“sQUICK\u SLOT\u PROFILE*”pPlayer->AddQuickSlotSkillDataToMyListslotID,&res->asQuickSlotData[slotID];也许吧?那么在添加数据打印时,一切都是零。如果我执行&res->asQuickSlotData[I],那么输出是垃圾,那么asQuickSlotData是如何定义的?你并没有发布足够的代码让任何人都知道到底发生了什么。