我无法让变量参数正确传递给方法 - 该方法旨在选择加权分布中的随机值并返回所选结果的索引。
一个示例用法是:
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/作为参考。