2

私のプログラムは完成しました。私が得た唯一のエラーは、二分探索と線形探索からのものです。それらは同じエラーなので、1つだけ投稿します。

bool searchByDescriptionBinary(char desc[][DESC_SIZE],
                             const int NUM_ROWS,
                             char searchValue[DESC_SIZE],
                             int& foundPosition)

 {
 int first = 0,
     last = NUM_ROWS - 1,
     middle,
     position = -1;
 bool found = false;

 while (!found && first <= last)
 {
     middle = (first + last) / 2;
     if (desc[middle] == searchValue)
     {
         found = true;
         position = middle;
     }
     else if (desc[middle] > searchValue)
         last = middle - 1;
     else
         first = middle + 1;
 }
 return position;
 }
4

4 に答える 4

3

関数はreturntypeとして定義されていますが、(最後のステートメントの形式で)をbool返します。これはタイプエラーです。同意するまでどちらかのタイプを変更すると、コンパイルされます。intreturn position

于 2011-12-01T01:53:52.417 に答える
1

関数はを返すように定義されてboolいますが、を返すことを試みています。positionこれはとして宣言されていintます。

戻りたいfoundtrueまたはになりますfalse)、found == true設定されている場合foundPosition = position

于 2011-12-01T01:55:25.817 に答える
0

まず、あなたが言っているエラーが発生する可能性はほとんどありません。この問題の原因は、 を返すように宣言された関数から を にしようとすることreturn positionです。これで何をしようとしているのですか?関数からを返そうとするのはなぜですか?positionintboolintbool

いずれにせよ、これは違法ではありません。つまり、C++ 言語のブール変換規則に従ってint暗黙的に変換されます。boolこのような場合、一部のコンパイラは警告を発行しますが、エラーは発行しません。いずれにせよ、これはあなたが望んでいたものではないことは間違いありません。

foundPosition次に、関数の宣言から、パラメーター (として宣言されている)を介してインデックスを返すことを意図していたことは明らかですint &。関数の最後のreturnステートメントはreturn found、 ではなくを実行するはずだったようですreturn position。しかし、あなたのコードでは、 の存在を完全に無視していますfoundPosition。なんで?もともと意図されていたように、パラメーターをreturn介して送信するのではなく、位置を取得しようとしているのはなぜですか? foundPositionこれはあなたのコードですか?

第三に(@Blastfurnaceがコメントですでに指摘したように)、あなた==との>比較は、あなたが思っていることをしていません。組み込みの比較演算子を使用して C スタイルの文字列を比較することはできません。strcmp代わりに使用する必要があります。

于 2011-12-01T02:02:51.483 に答える