私はコールバックに渡すオプションの引数としてvoid *を取るTimerクラスを使用しています。私は整数を渡す必要がありますが、私のロジックはうまく動作していないようです。Intをvoidとして渡す*その後値を取得する
Event_PlayerSpawn()には、int "client"のメモリ位置を指すint * clientIndexがあります。私はこれをvoid * paramに渡し、コールバックでそれをint *にキャストしてから、逆参照して値を取得します。どこが間違っていますか?
ResultType PlayerSpawnTimer::OnTimer(ITimer *pTimer, void *pData)
{
int client = *((int*)pData);
ConquestPlayer *pPlayer = dynamic_cast<ConquestPlayer*>(CEntity::Instance(client));
Msg("Spawn Timer Called client = %d!\n", client);
if(pPlayer)
{
pPlayer->FindSpawnLocation();
}
return Pl_Continue;
}
void GameManager::Event_PlayerSpawn(IGameEvent *event)
{
int client = engine->IndexOfEdict(GetEdictOfUserID(event->GetInt("userid")));
int *clientIndex = &client;
// Add a 0.1 second delay then handle spawn location
timerPlayerSpawn = timersys->CreateTimer(&playerSpawnTimerCallback, 5.0, clientIndex, 0);
}
もっと具体的に教えてください。コンパイルエラーがありますか?エラーメッセージは何ですか、どのラインにありますか?それとも、ランタイムエラーですか? – Haspemulator
ランタイムエラーです。コールバックでは0として出力されますが、渡されたときは異なります(実行時に変更されますが、1〜33の間で変更されます)。 –