C语言结构体访问报错:expected identifier before '(' token 求解
解决C语言链表/图代码中PrintList函数的编译错误
嘿,我一眼就看出你这条fprintf语句里的语法问题了,这正是编译器报"Error: expected identifier before '(' token"的原因。
错误根源拆解
在C语言里,->运算符的右侧必须是结构体/联合体的成员名称(合法标识符),而你写的aux->((int*)this[0])里,->后面跟着的是一个带强制转换的表达式,编译器找不到它期待的成员标识符,自然就抛出错误了。
推测你的意图与修正方案
从代码片段来看,你应该是想通过aux指针访问结构体里的两个int类型成员,而this数组的用途大概率是存储成员的字节偏移量,或是你错误地用数组元素代替了成员名。下面分两种常见场景给出修正:
场景1:this存储结构体成员的字节偏移量
如果this[0]和this[1]是你用offsetof宏获取的成员偏移值,那正确的访问方式需要通过字节偏移计算成员地址,再取值:
// 先假设你的链表节点结构体定义如下 typedef struct Node { int id; int value; struct Node* next; // 链表节点必备指针 // 图结构相关的其他成员(比如邻接表指针等) } Node; void PrintList(FILE* output, Node* aux, size_t member_offsets[2]) { // 转成char*是因为偏移量以字节为单位,计算后再转成int*取值 int target_id = *(int*)((char*)aux + member_offsets[0]); int target_val = *(int*)((char*)aux + member_offsets[1]); fprintf(output, "%d:%d\n", target_id, target_val); }
场景2:直接访问结构体固定成员
如果this数组是多余的写法,你本来就是想访问结构体的固定成员(比如id和value),那直接用标准的成员访问语法即可:
typedef struct Node { int id; int value; struct Node* next; // 图结构相关成员 } Node; void PrintList(FILE* output, Node* aux) { // 直接用->访问结构体成员,这是C语言的标准写法 fprintf(output, "%d:%d\n", aux->id, aux->value); }
验证修正
把对应场景的代码替换你原来的错误语句,再编译应该就能顺利通过了。如果你的实际场景和这两种都不一样,可以补充结构体的完整定义和this数组的具体用途,我再帮你细化调整~
内容的提问来源于stack exchange,提问作者Granger Obliviate
相关产品推荐
相关产品推荐

