Wil*_*ill 22 c++ ubuntu gcc boost
我使用的是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);
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
no matching function for call to ‘min(long unsigned int&, unsigned int&)
from /usr/include/c++/4.6/bits/stl_algobase.h*
Run Code Online (Sandbox Code Playgroud)
注意:使用ubuntu 12.04 32位工作正常
知道如何解决这个问题吗?
Naw*_*waz 47
std::min是一个函数模板,T其中是函数的两个 参数的类型.但是你似乎传递了不同类型的函数参数,并依赖于函数参数的模板参数推导,这是不可能的.
所以修复是:
要么不依赖模板参数推导,而是明确提到模板参数:
std::min<unsigned long>(ulongarg, uintarg); //ok
//^^^^^^^^^^^^^^^
//don't rely on template argument deduction
//instead pass template argument explicitly.
Run Code Online (Sandbox Code Playgroud)或传递相同类型的函数参数:
std::min(ulongarg, static_cast<unsigned long>(uintarg)); //ok
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//pass both arguments of same type
Run Code Online (Sandbox Code Playgroud)