[std::map]염치 불구하고.. ;;
진짜 모르겠네요..;; 저번에 xylosper님께서 몇가지 사항들을 알려주셔서
일단 그 문제 해결하였습니다.
맵 사용시에 계정으로 키값을 설정해서
std::map[const char*, Player*]::iterator it = m_acctMap.find(account);
계정(account)과 같은 게 있으면 1번을 타고
Player* player = 0;
-------- 1번 -------------------
if (it != m_acctMap.end())
{
//기존 유저일 경우
player = it->second;
printf("old account : %s\n",(char*)&player->m_account);
}
---------------------------------------------
새로운 계정이 들어오면 2번을 타게 했습니다.
-------- 2번 -------------------
else
{
// 새로운 유저일 경우
player = new Player();
m_acctMap[account] = player;
player->m_account = account;
isOnline = false;
printf("new account : %s\n",(char*)&player->m_account);
}
---------------------------------------------
그런데 제가 실험한건 항상 2번 즉 새로운 계정이 들어올 때인데요...
아무도 로그인 되어 있지 않은 상황에서 계정 a, b, c... 가 있다면 위에 루틴에서 처음에
a가 들어오면 2번의 루틴을 잘 탑니다.. 문제는 그 이후 새로운 b, c의 유저는 계속 1번을 탑니다.;;
항상 2번만 타야할 것들이 계속 1번을 타는데요.. 제가 혹시 무엇을 잘못 했을까요...
하나 발견한건 1번 루틴에서 프린트를 찍으면 b, c가 들어와 루틴을 탈때도 a의 계정이 나옵니다..;;
그래서 혹시나 제가 find와 end의 사용을 제대로 못 했나 하는 생각이 드는군요.
참고로 위에 함수가 login이라면 호출시 login(const char* account)
account의 선언은 char account[30]입니다.
정리...!!!
아무 계정도 저장되지 않은 상태에서 login(a)가 호출되면
루틴 2번 호출..
그 이후 b가 로그인 login(b)하면 1번 루틴을 타면서 a의 계정을 출력..
c도 비와 마찬가지로 a의 계정을 출력..
흠.. 안풀립니다 ;;
const char* 를 std::string 으로...
위의 경우 key 값이 user id가 되는게 아니고 user id를 가리키는 포인터가 됩니다. const char*를 std::string으로 바꾸면 잘 될 것 같네요.
아..네, 감사합니다..
아..네, 감사합니다.. ;;
뜻이 있어서 그렇게들 말씀을 하셨네요 ;; 저거완 관계있을줄이야...
좋은 하루 되십시오~ 다시 한번 감사합니다..
댓글 달기