xutility的错误(<chrono> <random> C ++标准库)

时间:2015-06-20 17:24:22

标签: c++ random visual-studio-2013 chrono

我在使用标准和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:&#39; result_type&#39; :不是&#39; std :: chrono :: time_point&#39;的成员e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3256

错误2错误C2146:语法错误:缺少&#39 ;;&#39;在标识符&#39; _Ty1&#39;之前e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3256

错误3错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3256

错误4错误C2065:&#39; _Ty1&#39; :未声明的标识符e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3258

错误5错误C2070:&#39; unknown-type&#39 ;:非法sizeof操作数e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3258

错误6错误C2065:&#39; _Ty1&#39; :未声明的标识符e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3259

错误7错误C2923:&#39; std :: _ If&#39; :&#39; _Ty1&#39;不是参数&#39; _Ty2&#39;的有效模板类型参数。 e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xutility 3259

错误8错误C2955:&#39; std :: _如果&#39; :使用类模板需要模板参数列表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;

在此之后,该类有更多代码,但错误发生在最后两行。

顺便说一句,我花了几个小时查询不同的搜索,试着找到答案,然后在这里发布没有可用的结果,尽管这很可能是我的不足之处。

谢谢!

使用Sebastion的帮助,之前的所有错误都已解决,但是已生成新的错误:

修改后的代码:

    std::default_random_engine engine(seed);

    cout << randNum(engine) << endl;

错误:

错误1错误C2039:&#39;生成&#39; :不是&#39; std :: chrono :: time_point&#39;的成员e:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ random 1618

1 个答案:

答案 0 :(得分:0)

  

cout << randNum(seed) << endl;

现在你是如何使用发行版的。您需要创建一个使用种子初始化的本地引擎,然后将引擎传递给分发的调用操作符。

std::default_random_engine engine(seed);
cout << randNum(engine) << endl;

有关更详细的示例,请参阅cppreference上的示例:

http://en.cppreference.com/w/cpp/numeric/random