tipos signos puntuación puntuacion ortograficos ortografia los largo guion gramatical funciones ejemplos c++ gcc ubuntu boost

c++ - puntuación - signos ortograficos



error: no hay función coincidente para la llamada a ''min(int sin signo largo, int & sin signo)'' (1)

Estoy usando ubuntu 12.04 - 64 bits. Lo probé con boost 1.46, 1.48, 1.52 y gcc 4.4 y 4.6 Cuando intento compilar:

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); }

Me sale este error:

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

Nota: con ubuntu 12.04 32 bits funciona bien

¿Alguna idea de cómo puedo arreglar esto?


std::min es una plantilla de función en T que es el tipo de ambos parámetros de la función. Pero parece que pasa argumentos de función de diferente tipo y confía en la deducción de argumentos de plantilla de los argumentos de función, lo cual no es posible.

Así que la solución es:

  • O no confíe en la deducción de argumentos de plantilla, en lugar de mencionar explícitamente el argumento de plantilla:

    std::min<unsigned long>(ulongarg, uintarg); //ok //^^^^^^^^^^^^^^^ //don''t rely on template argument deduction //instead pass template argument explicitly.

  • O pasar argumentos de función del mismo tipo:

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