2

以下の関数に bitset パラメータを渡そうとしていますが、できません:

エラー: 検索の呼び出しに一致する関数がありません (std::bitset<100000000ul>&, int, unsigned int, unsigned int)

コードは次のとおりです。

#include <bitset>


#define ELEMENTS 100000000
#define TRANSITION_POINT 500
using namespace std;

template<unsigned int N>
unsigned int search(bitset<N> &array, int value, unsigned int low, unsigned int high)  {

      unsigned int middle;
      .........
}

int main()  {

    const unsigned int NUMBER_OF_ELEMENTS = ELEMENTS;
    bitset<NUMBER_OF_ELEMENTS> b;

    unsigned int i = 0;
    i = TRANSITION_POINT;
    while(i < NUMBER_OF_ELEMENTS)  {

        b[i] = 1;
        i++;
    }

    pos = search(b, (int)1, (unsigned int)0, (unsigned int)NUMBER_OF_ELEMENTS);
    return 1;
}

コードをデバッグしようとしましたが、何が問題なのかわかりませんでした。誰か助けてください。

4

3 に答える 3

4

関数テンプレートは、最初の引数が次の型であることを期待しています

std::bitset<(unsigned int)NUMBER_OF_ELEMENTS>

しかしb、タイプです

std::bitset<(std::size_t)NUMBER_OF_ELEMENTS> 

この微妙な違いは、引数ベースの型推論がテンプレートと一致しないことを意味します (std::size_tたまたま のエイリアスでない限りunsigned int)。

これを修正するには、次の 2 つの方法があります。

  • テンプレートのパラメータ タイプを に変更しstd::size_tて、std::bitset
  • 関数テンプレートを明示的に使用します。
    pos = search<NUMBER_OF_ELEMENTS>(b, 1, 0, NUMBER_OF_ELEMENTS);
于 2011-04-19T03:22:47.430 に答える
0

コードは私のg++コンパイラで正常に動作します。私が得る唯一のエラーはです'pos' is not declared in this scopeint(また、呼び出し中およびunsigned int呼び出し中に型キャストするのは冗長だと思いますsearch();それは必要ありません)

于 2011-04-19T02:41:52.647 に答える
0

32 ビット gcc 4.4.3 では、segfault にならないようにするために必要な変更を以下に示します。

#define ELEMENTS 10000000

100000000セグメンテーション違反が発生したため、最大サイズがあるようですbitset<NUMBER_OF_ELEMENTS> b;

b.set(i,1);

オリジナルb[i] = 1でもセグメンテーション違反が発生しました。

于 2011-04-19T02:55:16.983 に答える