【问题标题】:Specifying for ambiguous reference指定不明确的引用
【发布时间】: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);

但是,还有另一个hashstd::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 - 这不是问题

标签: c++ hash ambiguous


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2015-04-24
      • 1970-01-01
      • 2020-01-04
      • 2017-02-04
      • 2014-10-12
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多