语法错误:缺少'';在'之前;类型';C代码
是的,以前有人问过我,我已经听从了建议,把我的减赤放在首位,但仍然不起作用语法错误:缺少'';在'之前;类型';C代码,c,compiler-construction,error-handling,C,Compiler Construction,Error Handling,是的,以前有人问过我,我已经听从了建议,把我的减赤放在首位,但仍然不起作用 void map_delete(map_t *map, char *key) { assert(map_contains(map, key)); map_elem_t *prev; map_elem_t *elem_to_remove; prev = map->elem; while(strcmp(prev->next->key, key) != 0) prev= pr
void map_delete(map_t *map, char *key) {
assert(map_contains(map, key));
map_elem_t *prev;
map_elem_t *elem_to_remove;
prev = map->elem;
while(strcmp(prev->next->key, key) != 0) prev= prev->next;
elem_to_remove = prev->next;
prev->next = elem_to_remove->next;
free(elem_to_remove);
}
map.c(74): error C2143: syntax error : missing ';' before 'type'
map.c(76): error C2065: 'prev' : undeclared identifier
map.c(76): warning C4047: '=' : 'int' differs in levels of indirection from 'map_elem_t *'
map.c(77): error C2065: 'prev' : undeclared identifier
map.c(77): error C2223: left of '->next' must point to struct/union
map.c(77): error C2198: 'strcmp' : too few arguments for call
map.c(77): error C2065: 'prev' : undeclared identifier
map.c(77): error C2065: 'prev' : undeclared identifier
map.c(77): error C2223: left of '->next' must point to struct/union
map.c(79): error C2065: 'elem_to_remove' : undeclared identifier
map.c(79): error C2065: 'prev' : undeclared identifier
map.c(79): error C2223: left of '->next' must point to struct/union
map.c(80): error C2065: 'prev' : undeclared identifier
map.c(80): error C2223: left of '->next' must point to struct/union
map.c(80): error C2065: 'elem_to_remove' : undeclared identifier
map.c(80): error C2223: left of '->next' must point to struct/union
map.c(81): error C2065: 'elem_to_remove' : undeclared identifier
map.c(81): warning C4022: 'free' : pointer mismatch for actual parameter 1
注意,代码的逻辑是正确的,因为它在另一台机器上工作,编译器对布局不满意,因为
assert
不是声明。您需要移动断言
,使其位于声明之后
使用支持C89最新标准的C编译器将是一个不错的选择。
assert(map_包含(map,key))代码>不是一个声明。(获得一个支持更合理的C标准的编译器并不是一个坏主意。)谢谢,我希望我也能,告诉我的老板吧!:(