指定模棱两可的参考

时间:2014-01-15 04:52:43

标签: c++ hash ambiguous

mdart/mdart_function.h中,定义了函数hash

inline nsaddr_t hash(nsaddr_t id) {
    bitset<ADDR_SIZE> tempAddress_ (id);
    bitset<ADDR_SIZE> address_;
    for(unsigned int i=0; i<ADDR_SIZE; i++) {
        if (tempAddress_.test(i)) {
            address_.set(ADDR_SIZE - 1 - i);
        }
    }
    address_.flip(ADDR_SIZE - 1);
    nsaddr_t temp = (nsaddr_t) address_.to_ulong();
#ifdef DEBUG
    fprintf(stdout, "\thash = %s\n", bitString(temp));
#endif
    return temp;
}

在另一个源文件中,引用了hash函数,其中包含正确的标题:

nsaddr_t dstAdd_ = hash(reqId);

但是,还有另一个hashstd::hash,当我构建它时它会抛出error: reference to 'hash' is ambiguous

有没有办法指定源代码尝试使用哪个hash?我知道std::hash,但是头文件中的hash怎么样?

2 个答案:

答案 0 :(得分:5)

您可以使用自定义hash函数所在的命名空间来消除歧义。如果它不在显式名称空间中,那么只需::hash()就可以在全局名称空间中找到它。

答案 1 :(得分:2)

如果您自己的哈希实现没有特定的命名空间,您可以使用::hash来引用它。