You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:调用random_shuffle时出现‘Term does not evaluate to a function taking 1 arguments’错误

解决random_shuffle的函数参数错误问题

你遇到的Term does not evaluate to a function taking 1 arguments错误,核心问题出在调用random_shuffle时的第三个参数传递上:

先看你写的这段代码:

random_shuffle(names.begin(), names.end(), rand());

错误原因

你这里传的rand()是直接调用了rand函数的结果——它会返回一个随机整数,但random_shuffle的第三个参数需要的是一个函数指针(或可调用对象),内部会主动调用这个对象来生成随机数。而你传的整数无法被当作函数调用,所以编译器抛出了这个错误。

修复方案

把第三个参数的括号去掉,直接传递rand这个函数指针即可:

random_shuffle(names.begin(), names.end(), rand);

这样random_shuffle就能正确调用rand函数来生成打乱序列所需的随机数了。

现代C++的更优写法

另外要提一句:从C11开始,random_shuffle已经被标记为废弃(C17正式移除),更推荐使用std::shuffle配合更可靠的随机数生成器,比如:

#include <random>
#include <algorithm>

// ...

std::random_device rd;
std::mt19937 rng(rd()); // 采用Mersenne Twister算法的随机数生成器
std::shuffle(names.begin(), names.end(), rng);

这种方式的随机性比rand()+random_shuffle要好得多,也更符合现代C++的编程规范。

内容的提问来源于stack exchange,提问作者ShostyBoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:23:55