错误:无法调用'min(long unsigned int&,unsigned int&)'的匹配函数

我正在使用Ubuntu的12.04 – 64位。 我用boost 1.46,1.48,1.52和gcc 4.4和4.6进行了testing当我尝试编译时:

while (m_burstReqBeatsRemain) { if (m_burstReqAddress % m_dramRowSize == 0) { m_admRequestQueue.push_back(adm_request()); adm_request &req = m_admRequestQueue.back(); req.address = m_burstReqAddress; req.command = tlm::TLM_READ_COMMAND; //call to min function req.readLen = std::min(m_burstReqBeatsRemain * sizeof(Td), m_dramRowSize); } m_burstReqBeatsRemain--; m_burstReqAddress += sizeof(Td); m_ocpTxnQueue.push_back(m_ocpReq); } 

我得到这个错误:

 no matching function for call to 'min(long unsigned int&, unsigned int&) from /usr/include/c++/4.6/bits/stl_algobase.h* 

注:与Ubuntu 12.04 32位工作正常

任何想法如何我可以解决这个问题?

std::minT上的函数模板,它是函数的两个参数的类型。 但是你似乎传递了不同类型的函数参数, 并且依赖于函数参数的模板参数推导,这是不可能的。

所以解决方法是:

  • 或者不要依赖模板参数推导,而是明确地提到模板参数:

     std::min<unsigned long>(ulongarg, uintarg); //ok //^^^^^^^^^^^^^^^ //don't rely on template argument deduction //instead pass template argument explicitly. 
  • 或者传递相同类型的函数参数:

     std::min(ulongarg, static_cast<unsigned long>(uintarg)); //ok //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //pass both arguments of same type