Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 奇怪的boost无序映射错误_C++_Boost - Fatal编程技术网

C++ 奇怪的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

我已经有了3-4张无序的带有boost的_地图,而且都很好。 现在我想再做一次,但我从地图上得到了错误的输出

结构:

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是如何定义的?你并没有发布足够的代码让任何人都知道到底发生了什么。