0

本当に奇妙なことが起こっています: foo(100*1.0f) を呼び出すと、行のどこかで 0 になります。確認するために、foo() にブレークポイントを設定しましたが、実際にはゼロであり、実際に 100*1.0 で呼び出されます。 f. コードは Obj-C++ です。

ご覧のとおり、score*scoreMultiplier は 100 です。 呼び出し関数 http://img341.imageshack.us/img341/1109/screenshot20100502at135.png

void JNPP1PGameController::addScoreToPlayer(NSInteger score) {
    if(!gameOver){
        JNLogString(@"Adding score(%d*%f) to player", score, scoreMultiplier);
        [player addScore: score*scoreMultiplier];
        [wrapper setShouldNotify];
        [wrapper notify];
    } else {
        JNLogString(@"Not adding score(%d*%f) because GAME IS OVAR", score, scoreMultiplier);
    }
}

そして、これが XCode の GDB フロントエンドで呼び出された関数です。ここで _score は 0 です。

- (void) addScore:(NSInteger) _score {
    score += _score;
    JNLogString(@"Player can has %d points.. HURRAY!!!", score);
}
4

1 に答える 1

0

コードは、呼び出し元のコードを次のように変更することで修正されました。

void JNPP1PGameController::addScoreToPlayer(NSInteger score) {
    if(!gameOver){
        JNLogString(@"Adding score(%d*%f) to player", score, scoreMultiplier);
        NSInteger _score = score*scoreMultiplier;
        JNLogString(@"This is the case: %d", _score);
        [player addScore: _score];
        [wrapper setShouldNotify];
        [wrapper notify];
    } else {
        JNLogString(@"Not adding score(%d*%f) because GAME IS OVAR", score, scoreMultiplier);
    }
}

未定義の(「メソッドが見つかりません」という警告が表示された)パラメーター型へのキャストで問題が発生したと思います。

于 2010-05-02T12:51:11.643 に答える