C++ 为什么mt19937 m(随机_设备()())无法编译?
我想创建一个函数,根据元素的值作为概率随机返回向量的索引:C++ 为什么mt19937 m(随机_设备()())无法编译?,c++,syntax,compiler-errors,C++,Syntax,Compiler Errors,我想创建一个函数,根据元素的值作为概率随机返回向量的索引: float getRandomIndex(const vector<float>& v){ random_device r; mt19937 m(r()); return discrete_distribution<>(v.begin(),v.end())(m); } int main(){ for(int i=0;i<10;i++){ vector
float getRandomIndex(const vector<float>& v){
random_device r;
mt19937 m(r());
return discrete_distribution<>(v.begin(),v.end())(m);
}
int main(){
for(int i=0;i<10;i++){
vector<float> a{0.9,0.1};
cout << getRandomIndex(a) << endl;
}
return 0;
}
生成1个警告和1个错误
但是我试着
random_device r;
cout << r() << endl;
random\u设备r;
不能再罢工了!在本例中,random\u device()()
部分被解析为返回random\u device的函数。在这种情况下,代码可以创建临时变量,也可以声明函数。编译器被迫假定它是一个函数声明
您可以使用大括号或附加括号来修复它
m(random_device{}()) //uniform initialization syntax, will work
m((random_device()())) //extra parenthesis, also will work
罢工又来了!在本例中,random\u device()()
部分被解析为返回random\u device的函数。在这种情况下,代码可以创建临时变量,也可以声明函数。编译器被迫假定它是一个函数声明
您可以使用大括号或附加括号来修复它
m(random_device{}()) //uniform initialization syntax, will work
m((random_device()())) //extra parenthesis, also will work
如果它有助于描述它,那么您有一个名为m
的函数,该函数将函数作为参数,返回一个函数,该函数不取任何内容,并返回一个随机\u设备
m
返回一个mt19937
添加一对括号来声明变量
您没有尝试遵循该建议吗?我的意思是,你的编译器花了很多精力来指出你可能需要这些参数的确切位置。它与mt19937
或random\u device
没有任何关系。如果它有助于描述它,那么你有一个名为m
的函数作为参数,函数返回一个函数,该函数不接受任何内容,并返回一个随机\u设备
m
返回一个mt19937
添加一对括号来声明变量
您没有尝试遵循该建议吗?我的意思是,你的编译器花了很多精力来指出你可能需要这些参数的确切位置,而这与mt19937
或random\u设备
无关。
cout << random_device()() << endl;
m(random_device{}()) //uniform initialization syntax, will work
m((random_device()())) //extra parenthesis, also will work