Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

399
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!