参数有不完整的类型错误c编程

时间:2014-07-12 22:43:27

标签: c compiler-errors

我有以下代码,我收到一条错误消息,指出参数map的类型不完整。变量strings是一个smap,在以下代码所在的一个头文件中声明为extern。

如何解决此问题,或错误意味着什么,或导致此错误的常见原因是什么?

void print_strings(smap map);

void emit_strings(AST *ast) {
/* TODO: Implement me. */
    printf(".data\n");
    print_strings(strings);
}

void print_strings(smap map){
    for (size_t i = 0; i < map -> num_buckets; i += 1) {
        for (size_t j = 0; j < map -> buckets[i].num_pairs; j+=1) {
            printf("str%d:  .asciiz  %c\n",label_count,map ->buckets[i].pairs[j].key);
            label_count ++;
        }
    }

    label_count = 0;
}

1 个答案:

答案 0 :(得分:3)

我之前发布了一个错误的答案,但是用户@mafso慷慨地引导我朝着正确的方向前进。

我之前忽略的问题是你的print_strings函数试图直接访问smap类型的成员变量。由于这是一个不完整的类型(即它在一个单独的源文件中定义),你不能这样做。您需要使用标头中声明的任何函数才能访问buckets及其内部值。

典型的标题可能如下所示:

#ifndef SMAP_H
#define SMAP_H

#include "bucket.h"
#include <stdlib>

typedef struct string_map *smap;

smap smap_create(size_t num_buckets);
bucket *smap_get_buckets(smap map):

void *smap_add_bucket(smap map, bucket b);

#endif

在此示例中,您不会使用map->buckets来访问buckets成员,而是调用getter:smap_get_buckets(map)

事实是,这是所有猜测,因为您仍未提供有关声明和定义smap的文件的任何提示。