【问题标题】:error: no matching function for call to ‘min(long unsigned int&, unsigned int&)’错误:没有匹配函数调用“min(long unsigned int&, unsigned int&)”
【发布时间】:2013-01-08 14:28:40
【问题描述】:

我使用的是 ubuntu 12.04 - 64 位。我用 boost 1.46、1.48、1.52 和 gcc 4.4 和 4.6 当我尝试编译时:

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 位可以正常工作

知道如何解决这个问题吗?

【问题讨论】:

  • 那是因为你试图取两种不同类型的“min”,而“min”期望这两个值是相同的类型。

标签: c++ gcc ubuntu boost


【解决方案1】:

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

所以解决方法是:

  • 要么不依赖模板参数推导,而是明确提及模板参数:

    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
    

【讨论】:

  • @user2008530:那是编译器的bug,或者是std::min的实现中的bug。
  • @user2008530:gcc 是愚蠢的。在那个平台上unsigned longunsigned int 本质上是同一类型。恕我直言,gcc 应该仍然给你一个错误,但这可能是它没有的原因。
  • 那么32位版本的方法的行为可能不是预期的行为?
  • @user2008530:是的。 unsigned longunsigned int是两种不同的类型,所以编译器应该报错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多