我正在尝试将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;
}
我尝试调试代码,但无法找到问题所在。请有人帮忙。
答案 0 :(得分:3)
您的函数模板要求其第一个参数为
类型std::bitset<(unsigned int)NUMBER_OF_ELEMENTS>
但b
的类型为
std::bitset<(std::size_t)NUMBER_OF_ELEMENTS>
这种微妙的差异意味着基于参数的类型推断将无法与您的模板匹配(除非std::size_t
恰好是unsigned int
的别名)。
有两种方法可以解决它:
std::size_t
以匹配std::bitset
pos = search<NUMBER_OF_ELEMENTS>(b, 1, 0, NUMBER_OF_ELEMENTS);
答案 1 :(得分:0)
代码在我的g++
编译器中运行良好。我得到的唯一错误是'pos' is not declared in this scope
。 (另外,我认为在调用int
时对unsigned int
和search()
进行类型转换是多余的;不需要这样做。
答案 2 :(得分:0)
使用32位gcc 4.4.3这里需要进行更改以使其不是段错误:
#define ELEMENTS 10000000
显然有最大尺寸,因为100000000
导致bitset<NUMBER_OF_ELEMENTS> b;
上的段错误
b.set(i,1);
原始b[i] = 1
也导致了段错误。