Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么mt19937 m(随机_设备()())无法编译?_C++_Syntax_Compiler Errors - Fatal编程技术网

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