1

はい、以前に尋ねられました。ここでのアドバイスに従い、宣言を一番上に置きましたが、まだ機能していません。

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

別のマシンで動作していたため、コードのロジックは正しいことに注意してください。レイアウトに満足していないコンパイラです。

4

1 に答える 1

3

assertは宣言ではないため、コンパイラは不平を言います。assertを移動して、宣言の後に来るようにする必要があります。

C89 よりも最近の標準をサポートする C コンパイラを使用するのは良い方法です。

于 2013-07-18T13:29:21.760 に答える