0
/* Find an item in an array-like object
 * @param val the val to search for
 * @param arr an array-like object in which to search for the given value
 * @param size the size of the array-like object
 * @return the index of the val in the array if successful, -1 otherwise
 */
template < class T>
int mybsearch(T val, T const arr[], const int &size)

const char* と文字列の配列を使用してこのテンプレート関数を呼び出そうとすると、コンパイラは不平を言います... mybsearch("peaches", svals, slen)、これに対応するためにテンプレート プロトタイプを変更するにはどうすればよいですか?

これが文字列の配列です

  string svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
  const int slen = sizeof(svals)/sizeof(string);
4

2 に答える 2

2

Tは と推定されるためconst char*、 で初期化しようとしてconst char* const[]string[]ます。これは機能しません (引数の型が基本的に同じである場合にのみ配列を関数に渡すことができます - 修飾子を除いて - パラメーターの型と)。

次のいずれかを実行できます

  • 一貫して C 文字列を使用します。例:

    const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
    

    推奨されません

  • C++ 文字列を一貫して使用する

    mybsearch(string("peaches"), svals, slen)
    
  • 引数を mybsearch に分離します (比較可能な限り、配列型とは異なる型の要素を検索できます)

    template < class T, class U>
    int mybsearch(T val, U const arr[], const int &size)
    
于 2012-06-03T21:40:56.517 に答える
0

(質問が延長された後、完全に回答が変更されました)

問題は、検索する値がであるのにconst char *、検索する配列がstd::stringsの配列であるということです。using std(まあ、私はあなたがコードのどこかにあり、あなたがあなた自身のものではなく標準の文字列を使用していることを願っています。)

次のように呼び出す必要があります。

mybsearch(string( "peaches")、svals、slen)

于 2012-06-03T20:50:17.577 に答える