求助:调用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
相关产品推荐
相关产品推荐

