Tôi đang cố gắng tìm ra lý do tại sao mã sau không hoạt động và tôi cho rằng đó là sự cố khi sử dụng char * làm loại khóa, tuy nhiên tôi không chắc mình có thể giải quyết nó như thế nào hoặc tại sao nó lại xảy ra. Tất cả các chức năng khác mà tôi sử dụng (trong SDK HL2) đều sử dụng char*
nên việc sử dụng std::string
sẽ gây ra nhiều biến chứng không đáng có.
std::map<char*, int> g_PlayerNames;
int PlayerManager::CreateFakePlayer()
{
FakePlayer *player = new FakePlayer();
int index = g_FakePlayers.AddToTail(player);
bool foundName = false;
// Iterate through Player Names and find an Unused one
for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it)
{
if(it->second == NAME_AVAILABLE)
{
// We found an Available Name. Mark as Unavailable and move it to the end of the list
foundName = true;
g_FakePlayers.Element(index)->name = it->first;
g_PlayerNames.insert(std::pair<char*, int>(it->first, NAME_UNAVAILABLE));
g_PlayerNames.erase(it); // Remove name since we added it to the end of the list
break;
}
}
// If we can't find a usable name, just user 'player'
if(!foundName)
{
g_FakePlayers.Element(index)->name = "player";
}
g_FakePlayers.Element(index)->connectTime = time(NULL);
g_FakePlayers.Element(index)->score = 0;
return index;
}
std:string
một lần và hạnh phúc sau đó.