我想在c++中创建一个多线程记录器,它也可以从ccode调用
这在我的source.cpp文件中:
\include<;cstdlib>;
#包括<;iostream>;
#包括<;螺纹>;
#包括「;来源:h“;
使用名称空间std;
#ifdef_uucplusplus
“外部”;";{
#恩迪夫
类线程_obj{
公众:
void运算符()(浮点*x)
{
printf(“值:%d”,x);
}
};
无效日志(浮动值)
{
螺纹th1(螺纹_obj(),值);
th1.join();
}
#ifdef_uucplusplus
}
#恩迪夫
这在source.h中:
\ifdef\uucplusplus
“外部”;";{
#恩迪夫
无效日志(浮动值);
#ifdef_uucplusplus
}
#恩迪夫
现在我想从C文件中使用它,比如:log(myFloatValue),当然包括头文件
但我犯了一些奇怪的错误,比如:
错误C2672“调用”:未找到匹配的重载函数myproj C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 43
错误C2893未能专门化函数模板“未知类型std::invoke(\u Callable&;,\u Ty1&;,\u Types2&;…)noexcept(<;expr>;)”myproj C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39
错误C2780“未知类型std::invoke(&u Callable&;)noexcept(<;expr>;)”:需要1个参数-2个提供的hackatlon\u 0\u 1 C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39
我的问题是,我如何做到这一点,或者如何解决这些错误
您的代码存在多个问题:
- 运算符()的参数应该是
float x而不是float*,因为这是传递给线程的内容 - 日志函数与标准数学日志冲突。更改函数名或将其放入不同的命名空间中
- 使用格式说明符打印%d"。它应该是
";%f"因为输入是浮动的 - 您不需要放置
extern";"用于类。您正在避免仅对需要从c文件调用的log函数进行名称损坏