Подтвердить что ты не робот

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 бит работает отлично

Любая идея, как я могу это исправить?

4b9b3361

Ответ 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