bool hasWord(int y, int x, string &word) {
if(!inRange(y, x)) return false;
if(board[y][x] != word[0]) return false;
if(word.size() == 1) return true;
for(int direction = 0; direction < 8; direction++) {
int nextX = x + dx[direction];
int nextY = y + dy[direction];
if(hasWord(nextY, nextX, word.substr(1))) // <--- This
return true;
}
return false; }
错误:'std :: string&amp;类型的非const引用的初始化无效来自'std :: basic_string'类型的右值的{aka std :: basic_string&amp;}' if(hasWord(nextY,nextX,word.substr(1)))
为什么我错了?
答案 0 :(得分:3)
错误消息说明了一切:从类型std::string
的右值开始,对std::basic_string
{aka std::basic_string
}类型的非const引用进行无效初始化。
即。对非const的引用不能绑定到临时对象(也称为r值)。该临时对象由word.substr(1)
表达式创建。
在声明中:
bool hasWord(int y, int x, string &word)
设为string const& word
,因为您不需要可修改的word
。
答案 1 :(得分:1)
错误的原因在于此次调用
if(hasWord(nextY, nextX, word.substr(1)))
^^^^^^^^^^^^^^
创建了一个std :: string类型的临时对象,并且您正在尝试将非常量引用与临时对象绑定。
如果函数中没有更改字符串,则只需声明类似
的函数bool hasWord(int y, int x, const string &word) {
^^^^^