【问题标题】:C++ compilation error in discrete_distribution离散分布中的 C++ 编译错误
【发布时间】:2017-01-05 14:07:16
【问题描述】:

我在以下几行中遇到编译错误,我不完全理解。 根据msdn,语法是正确的。

vector<int> temp_weights = //some data will be here

discrete_distribution<int> weights ({ temp_weights.begin(), temp_weights.end() }); //error C2440

完整的错误是:

Error   5   error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::discrete_distribution<int>'   

【问题讨论】:

  • 请注意您的完整编译器版本。
  • @tambre: 这是 Visual Studio C++ 2013 Update 5

标签: c++ visual-studio stl


【解决方案1】:

discrete_distribution&lt;int&gt; weights { temp_weights.begin(), temp_weights.end() };

这不起作用的原因是因为它是初始化列表的语法, 编译器认为你想将temp_weights.begin() 存储在weights[0]temp_weights.end()weights[1]

应该有一个接受两个vector::iterator的构造函数(以便复制向量元素),所以这应该适合你

discrete_distribution&lt;int&gt; weights ( temp_weights.begin(), temp_weights.end() );

【讨论】:

  • thx,但在我的 版本中似乎没有这样的构造函数,从那时起我收到错误:Error 5 error C2661: 'std::discrete_distribution&lt;int&gt;::discrete_distribution' : no overloaded function takes 2 arguments
  • 不幸的是,该错误可能是由于您的 vs2013 版本中的错误source
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2020-05-05
  • 2021-03-04
相关资源
最近更新 更多