c++ - 来自 Stroustrup 的随机数示例存在编译错误
问题描述
我正在使用 Stroustrup C++ 第 4 版第 1182 页中的这个随机数示例。编译器报告错误auto
,说明 auto 不能与类的非静态成员一起使用。我对这种绑定的结果类型感到困惑。有谁知道如何解决错误以便可以使用随机数生成器?
#include <random>
using namespace std;
class Rand_int {
public: // added
Rand_int(int lo, int hi) : p{lo,hi} { }
int operator()() const { return r(); }
private:
uniform_int_distribution<>::param_type p;
auto r = bind(uniform_int_distribution<>{p},default_random_engine{});
};
int main()
{
Rand_int ri {0,10};
int pz = ri();
return 0;
}
编译错误:
clang++ -Wall -std=c++11 -pedantic test252.cc && ./a.out
test252.cc:11:5: error: 'auto' not allowed in non-static class member
auto r = bind(uniform_int_distribution<>{p},default_random_e...
^~~~
解决方案
不能auto
用于类的非静态成员的类型,所以代码示例是错误的。
相反,您可以这样做:
class Rand_int {
private:
std::function<int()> r = bind(uniform_int_distribution<>{p},default_random_engine{});
// ...
};
这会将 of 的返回类型转换为返回std::bind
int 的 void 函数,这是所需的行为。
这是一个演示。
推荐阅读
- angular - Angular:Formbuilder中的验证器字母数字或空格
- python - 准确度指标计算是否从 TensorFlow 1.14 更改为 TensorFlow 2.3?
- javascript - 元素被状态值覆盖
- flutter - 如果包含 endDrawer,Flutter 2.0 appbar 后退按钮会消失
- laravel - Laravel:如何为自定义类函数创建 routes/console.php 条目?
- python-3.x - 有没有办法从 Dagster failure_hook 和 success_hook 获取回溯堆栈?
- python - 如何将 PEP 517 和 PEP 518 用于本地可用(不在 PYPI 上)、系统范围的 CLI Python 脚本
- c++ - 为什么我班的这个功能不起作用?
- javascript - 无法读取未定义的属性“过滤器”,React.js
- python - 多个@app.route / 函数(python / sqlite3)之间的数据传输