【发布时间】:2014-01-15 04:52:42
【问题描述】:
在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);
但是,还有另一个hash、std::hash,当我构建它时它会抛出error: reference to 'hash' is ambiguous。
有没有办法指定源代码尝试使用哪个hash?我知道std::hash,但是头文件中的hash呢?
【问题讨论】:
-
在标题中,定义了
#define __mdart_function__。我可以将它用作命名空间吗?无论如何,我会尝试__mdart_function__::hash和::hash。谢谢。 -
不,您不能将宏定义用作命名空间。但是您可以通过在函数声明和定义周围放置
namespace myspace { .... }来定义自己的命名空间。然后,您可以使用myspace::hash()引用您的函数。 -
还有 - 如果你没有
using namespace std- 这不是问题