我在 C++ 类中有一个递归函数,如下所示:
\n\nClass myClass{\n private:\n static const int MAX_ALPHA = 1000;\n static const int MAX_BETA = -1000;\n public:\n void startSearch();\n int search(int& alpha, int& beta, int h);\n int value();\n };\nRun Code Online (Sandbox Code Playgroud)\n\n实现看起来像这样:
\n\nvoid Class::startSearch(){\n int alpha = MAX_ALPHA;\n int beta = MAX_BETA;\n int h = 10;\n int score = search(alpha, beta, h);\n}\n\nint search(int& alpha, int& beta, int h){\n if(h == 0){\n return value(); \n }\n //do some stuff\n int score = search(-beta, -alpha, h-1); // ERROR HERE\n //do some more stuff\n return score;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我很困惑为什么当我调用 search() 函数时编译器会给我一个错误。它说:“错误:\xe2\x80\x98int&\xe2\x80\ 类型的非常量引用的初始化无效x99 来自 \xe2\x80\x98int\xe2\x80\x99 类型的右值。当我不通过引用传递时,问题就会消失 - 但是,我想通过引用传递。
\n\n感谢任何帮助,如果需要,我也很乐意提供有关该问题的更多信息。谢谢你!
\n注意返回的结果operator-是右值;so-beta和-alpha都是右值,然后不能绑定到对int, ie 的左值引用int&。
您可以改为传递左值;如果您不想更改函数的参数类型(并且应该修改参数以进行引用传递)。例如
int search(int& alpha, int& beta, int h){
if(h == 0){
return value();
}
//do some stuff
alhpa = -alpha;
beta = -beta;
int score = search(beta, alpha, h-1);
//do some more stuff
return score;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |