Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

403
Vistas
Cómo crear un registrador multihilo en C++

Quiero crear un registrador de subprocesos múltiples en c++ que también se pueda llamar desde el código c .

Esto está en mi archivo source.cpp :

 #include <cstdlib> #include <iostream> #include <thread> #include "source.h" using namespace std; #ifdef __cplusplus extern "C" { #endif class thread_obj { public: void operator()(float* x) { printf("value: %d", x); } }; void log(float value) { thread th1(thread_obj(), value); th1.join(); } #ifdef __cplusplus } #endif

Y esto está en source.h :

 #ifdef __cplusplus extern "C" { #endif void log(float value); #ifdef __cplusplus } #endif

Y ahora quiero usar esto desde un archivo C como: log(myFloatValue); , por supuesto con el archivo de encabezado incluido.

Pero tengo algunos errores extraños, como:

 Error C2672 'invoke': no matching overloaded function found myproj C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 43 Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Ty1 &&,_Types2 &&...) noexcept(<expr>)' myproj C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39 Error C2780 'unknown-type std::invoke(_Callable &&) noexcept(<expr>)': expects 1 arguments - 2 provided hackatlon_0_0_1 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39

Mi pregunta es, ¿cómo puedo hacer esto o cómo puedo solucionar estos errores?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay varios problemas con su código:

  1. el argumento para operator() debe ser float x NOT float* ya que esto es lo que está pasando al subproceso
  2. su función de registro entra en conflicto con el registro matemático estándar. Cambie el nombre de la función o colóquelo en un espacio de nombres diferente
  3. printf usando el especificador de formato "%d" . Debería ser "%f" ya que la entrada es flotante
  4. No necesita poner extern "C" para las clases. Está evitando la manipulación de nombres solo para la función de log que debe llamarse desde el archivo c.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda