[英]retrieving value of unordered_map
我正在读取.dat文件的内容,并以此方式填充unordered_map:
bool FileManager::LoadSkillList(LPCSTR name)
{
int counter = 0;
std::ifstream myFile(name, std::ios::binary | std::ios::out );
if(myFile.fail())
{
myFile.close();
return false;
}
char skill[0x12C];
ZeroMemory(skill,0x12C);
char buff[100];
while(counter != TOTAL_SKILLS)
{
myFile.read(skill,0x12C);
if(myFile.gcount() < 1) continue;
auto skillBlock = (SkillInfo*)&skill;
#ifdef _DEBUG
char* skillName = skillBlock->szSkillName;
int delay = skillBlock->delayTime;
wsprintf(buff,"Skill Name: %s - Delay: %d\r\n",skillName,delay);
Log(buff);
#endif
this->skills.insert(std::make_pair(counter,skillBlock));
if(myFile.gcount() > 0) counter++;
myFile.seekg( counter * 0x12C);
}
#ifdef _DEBUG
Log("Skill count: %d\r\n",(int)this->skills.size());
#endif
myFile.close();
return (counter>0)?true:false;
}
当我尝试在LoadSkillList
方法中检索地图值时,它可以正常工作。 但是我在FileManager类中有另一个方法,该方法可被其他类访问,以便检索unordered_map值。
for(int skillNumber = 0; skillNumber < TOTAL_SKILLS; skillNumber++)
{
auto fileDelay = fManager->getDelay(skillNumber);
}
// ...
int FileManager::getDelay(int n)
{
auto block = this->skills.at(n);
return block->delayTime;
}
但是以某种方式,我的应用程序在该方法内崩溃了。 (我正在构建一个dll,然后用调试器将其签出。)
有什么线索吗? 已经尝试使用std::array, std::map
失败,两者都在同一方法下崩溃。
我这样做解决了我的问题:
宣布skills
为静态。 像这样将值添加到unordered_map
:
FileManager::skills.insert(std::make_pair(counter, new SkillInfo()));
memcpy(this->skills[counter],skillBlock,sizeof(SkillInfo));
像这样检索所需的值:
int FileManager::getDelay(int n)
{
auto block = FileManager::skills[n];
return block->delayTime;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.