报错如下图所示,图示报错的结构体定义和结构体变量声明是在Task_Handle.h文件中,结构体变量定义在Task_Handle.c;
一个个排除可能原因,步骤如下
步骤一:hal_host.cpp已经包含了定义声明该结构体的头文件;
步骤二:该工程的属性的附加包含目录已经包含了定义声明该结构体头文件所在的目录(见下图一),相关文件也添加进来了(见下图二);
步骤三:编译该工程添加进来的所有.C文件,看是哪个c文件导致的,结果所有文件都编译pass;
最后解决是在声明结构体变量的头文件加了extern "C",百度了一下,因为C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的名字与C语言的不同。假设某个函数的原型为 void foo(int x,int y)。该函数被C编译器编译后在库中的名字为_foo, 而C++编译器则会产生像_foo_int_int 之类的名字。加上extern "C"后,会指示编译器extern "C"{}中代码使用C编译器,就解决了名字匹配问题。