2017-11-13 7 views
0
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; } 

エラーのbasic_string:タイプ「STDの非const参照の無効初期化::ストリング& {別名をstd :: STD「タイプの右辺値から '&を}のbasic_string ::のbasic_string' (hasWord(nextY、nextX、word.substr(1)))場合無効初期化:: <char>

を理由は、私が間違っていた理由は?

答えて

2

エラーメッセージがすべてだ:タイプstd::basic_stringの右辺値からタイプstd::string {別名std::basic_string}の非const参照の無効初期化。

I.e.非constへの参照は一時オブジェクト(別名r値)にバインドすることはできません。その一時オブジェクトはword.substr(1)式によって作成されます。宣言で

:あなたが修正wordを必要としないので、

bool hasWord(int y, int x, string &word) 

は、それstring const& wordください。

+0

ありがとうよう

文字列は関数内で変更されていない場合は、単に関数を宣言します!それは動作します – SunBathe

1

エラーの理由は、この呼び出し

if(hasWord(nextY, nextX, word.substr(1))) 
         ^^^^^^^^^^^^^^ 

であっ型のstd ::文字列の一時オブジェクトを作成し、あなたが一時的なオブジェクトと非定数の参照をバインドしようとしているということです。

bool hasWord(int y, int x, const string &word) { 
          ^^^^^ 
+0

それは動作します!どうもありがとう – SunBathe

関連する問題