编译代码遇expected expression before ‘shared_mem_t’错误,寻求解决方案
错误原因
shared_mem_t是类型名(比如通过typedef定义的结构体类型),但你直接用它调用箭头运算符->访问成员——->只能用于指针变量,不能用于类型名,这才导致编译报错。
修复方案
分两种常见情况处理:
情况1:shared_mem_t是结构体类型
你需要先定义一个该类型的指针变量(可以是全局变量,也可以通过参数传递到函数中),用变量来访问成员:
// 示例:全局声明该类型的指针变量 shared_mem_t *shared_mem_ptr; void* temp_monitor(void* ptr) { int thread = *((int*)ptr); int temperature; // 使用指针变量访问成员 temperature = shared_mem_ptr->levels[thread].temp; // 函数返回void*类型,必须返回指针值 return NULL; }
情况2:shared_mem_t是变量名拼写错误
检查代码中是否存在名为shared_mem_t的指针变量,如果是拼写错误(比如实际变量名是shared_mem),直接修正变量名即可:
void* temp_monitor(void* ptr) { int thread = *((int*)ptr); int temperature; // 修正为正确的指针变量名 temperature = shared_mem->levels[thread].temp; return NULL; }
额外提示
你的函数声明为void*类型,必须返回一个指针值(比如return NULL;),否则编译会出现警告。
内容的提问来源于stack exchange,提问作者Roxanne Cardona
相关产品推荐
相关产品推荐

