gpt4 book ai didi

具有可变参数 (...) 的 C++ 方法报告不正确的 arg 值

转载 作者:行者123 更新时间:2023-11-30 00:53:25 26 4
gpt4 key购买 nike

我在获取可变参数以正确传递给方法时遇到问题 - 该方法旨在在加权分布中选择一个随机值并返回所选结果的索引。

一个示例用法是:

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/作为引用。

最佳答案

在可变参数函数中,浮点参数将被转换为 double 值。尝试

weightTotal += va_arg( argList, double );

关于具有可变参数 (...) 的 C++ 方法报告不正确的 arg 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com