我试图将位集参数传递给以下函数,但我无法:
错误:没有匹配的函数可用于调用搜索(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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试调试代码,但找不到问题所在。有人可以帮忙吗?
您的函数模板期望其第一个参数的类型
std::bitset<(unsigned int)NUMBER_OF_ELEMENTS>
Run Code Online (Sandbox Code Playgroud)
但b属于类型
std::bitset<(std::size_t)NUMBER_OF_ELEMENTS>
Run Code Online (Sandbox Code Playgroud)
这种微妙的差异意味着基于参数的类型推断将无法匹配您的模板(除非std::size_t恰好是 的别名unsigned int)。
有两种方法可以修复它:
std::size_t匹配std::bitsetpos = search<NUMBER_OF_ELEMENTS>(b, 1, 0, NUMBER_OF_ELEMENTS);| 归档时间: |
|
| 查看次数: |
4936 次 |
| 最近记录: |