在编译时,不能将非常量表达式从'int‘缩小到result_type。此错误发生在突出显示的位置。我将如何将其发送到static_cast()。我很难弄清楚我需要改变什么。
class UniformRandom
{
public:
**UniformRandom( int seed = currentTimeSeconds( ) ) : generator{ seed }**
{
}
private:
mt19937 generator;
};
发布于 2016-10-11 08:56:15
这是因为在使用{}
时,您使用generator
.And来初始化标准草案n4296:If a narrowing conversion is required to initialize any of the elements, the program is ill-formed.
。
形成标准草案n4296:
缩窄转换是隐式转换。 -从浮点数类型到整数类型,或 -从长双到双或浮动,或从双到浮动,除非源是一个常量表达式,转换后的实际值在可以表示的值范围内(即使不能准确表示),或 -从整数类型或非作用域枚举类型到浮点类型,除非源是常量表达式,转换后的实际值将符合目标类型,并在转换回原始类型时生成原始值,或 -从整数类型或非作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是一个常量表达式,其积分提升后的值将适合目标类型。
举个例子:
#include <iostream>
using namespace std;
int main()
{
int a = {1.2};
return 0;
}
它给出了错误:error: narrowing conversion of '1.2e+0' from 'double' to 'int' inside { } [-Wnarrowing] int a = {1.2};
要解决这个问题:
generator{seed}
=> generator(seed)
.
https://stackoverflow.com/questions/39970263
复制相似问题