Error: нет соответствующей функции для вызова 'min (long unsigned int &, unsigned int &)
Я использую ubuntu 12.04 - 64 бит. Я тестировал его с повышением 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 бит работает отлично
Любая идея, как я могу это исправить?
Ответы
Ответ 1
std::min
- это шаблон функции на T
, который является типом обоих параметров функции. Но вы, кажется, передаете аргументы функции другого типа и полагаетесь на вывод аргумента шаблона из аргументов функции, что невозможно.
Итак, исправление:
-
Либо не полагайтесь на вывод аргумента шаблона, а явно указываете аргумент шаблона:
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