使用std::uniform_int_distribution时出现E1087错误,求技术支持
解决std::uniform_int_distribution调用匹配错误
原代码
bool random_check = FALSE; std::string random_string(const int len) { const std::string alpha_numeric("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"); std::default_random_engine generator{ std::random_device{}() }; const std::uniform_int_distribution< std::string::size_type > distribution{ 0, alpha_numeric.size() - 1 }; std::string str(len, 0); for (auto& it : str) { if (random_check == FALSE) { it = alpha_numeric[distribution(generator)]; } } return str; }
报错信息
严重性 代码 描述 项目 文件 行 抑制状态 错误
(活动) E1087 没有与参数列表匹配的重载函数"std::uniform_int_distribution<_Ty>::operator() [with _Ty=size_t]"实例,且对象的类型限定符导致无法匹配
解决方法
- 问题根源:
distribution被声明为const,但std::uniform_int_distribution的operator()是非const成员函数,调用时会修改分布对象的内部状态,const修饰的对象不允许调用这类函数,因此触发匹配错误。 - 修复方式:直接去掉
distribution前的const关键字,修改后的代码片段:
std::uniform_int_distribution< std::string::size_type > distribution{ 0, alpha_numeric.size() - 1 };
内容的提问来源于stack exchange,提问作者Syna Cheats
相关产品推荐
相关产品推荐

