xutility 的错误(<chrono> <random> C++标准库)
Errors with xutility (<chrono> <random> C++ standard libraries)
我在使用标准和Microsoft Visual Studio 2013编写简单的随机数生成器时遇到问题。当我尝试编译时,它会抛出一堆与xutility文件相关的错误。当我试图使用BOOST库来完成同样的事情时,我遇到了一堆类似的错误,所以这可能是MSVC的问题。
#include <iostream>
#include <chrono>
#include <random>
using std::cout;
using std::endl;
auto seed = std::chrono::high_resolution_clock::now();
int main()
{
std::uniform_int_distribution<> randNum(1, 6);
cout << randNum(seed) << endl;
return 0;
}
以下是它抛出的错误:
错误1错误C2039:"result_type":不是"std::chrono::time_point"e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3256 的成员
错误2错误C2146:语法错误:缺少";"标识符"_Ty1"之前的e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3256
错误3错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3256
错误4错误C2065:"_Ty1":未声明的标识符e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3258
错误5错误C2070:"未知类型":操作数e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3258 的大小非法
错误6错误C2065:"_Ty1":未声明的标识符e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3259
错误7错误C2923:"std::_If":"_Ty1"不是参数"_Ty2"的有效模板类型参数e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3259
错误8错误C2955:"std::_If":类模板的使用需要模板参数列表e:\program files(x86)\microsoft visual studio 12.0\vc\include\xutility 3259
这是xutility的一段代码,它似乎引起了麻烦:
// TEMPLATE CLASS _Rng_from_urng
template<class _Diff, class _Urng>
class _Rng_from_urng
{ // wrap a URNG as an RNG
public:
typedef typename make_unsigned<_Diff>::type _Ty0;
typedef typename _Urng::result_type _Ty1;
typedef typename _If<sizeof (_Ty1) < sizeof (_Ty0),
_Ty0, _Ty1>::type _Udiff;
在这一点之后,类有更多的代码,但错误发生在最后两行。
顺便说一句,我花了几个小时查询不同的搜索,试图找到答案,然后在这里发布,但没有可用的结果,尽管这很容易是我的不足。
谢谢!
在Sebastian的帮助下,以前的所有错误都得到了解决,但产生了一个新的错误:
修改代码:
std::default_random_engine engine(seed);
cout << randNum(engine) << endl;
错误:
错误1错误C2039:"generate":不是"std::chrono::time_point"e:\program files(x86)\microsoft visual studio 12.0\vc\include\random 1618 的成员
cout << randNum(seed) << endl;
这就是您现在使用分发的方式。您需要创建一个使用种子初始化的本地引擎,然后将引擎传递给分发的调用运算符。
std::default_random_engine engine(seed);
cout << randNum(engine) << endl;
有关更详细的示例,请参阅cppreference上的示例:
http://en.cppreference.com/w/cpp/numeric/random
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中