可変引数をメソッドに適切に渡すのに問題があります。このメソッドは、加重分布内でランダムな値を選択し、選択した結果のインデックスを返すことを目的としています。
使用例は次のとおりです。
int pickupType = randomManager->ByWeights( 3, 0.60f, 0.20f, 0.20f );
switch( pickupType ) {
// ... pickupType should be 0 to 2, which we can then branch on
}
関数は次のように定義されます。
#include <cstdarg>
int RandomManager::ByWeights( int weightCount, ... ) {
va_list argList;
// Get the total of all weights
va_start( argList, weightCount );
float weightTotal = 0;
for ( int i = 0; i < weightCount; i++ ) {
weightTotal += va_arg( argList, float );
}
va_end( argList );
// Roll a number in that range
// ... (further processing - problem occurs above)
}
デバッガーで実行すると、 への呼び出しは、渡された値ではなく、va_arg( argList, float )
ガベージ値を返します。( 2.0, 1.77499998, -1.08420217e-019 )
( 0.60f, 0.20f, 0.20f )
私が間違っていることはありますか?私が知る限り、私は仕様に正確に従っています。http://www.cplusplus.com/reference/cstdarg/を参照として使用しています。