错误:未知类型名称和警告:隐式声明函数

时间:2016-09-08 19:59:30

标签: c

我在使用链接列表在c中实现队列时遇到问题。我已经在stackoverflow和其他网站上阅读了很多其他问题,但我仍然不知道如何修复我的代码问题。有人,请帮帮我吗? 这是我在c:

中的代码
#include <stdio.h>
#include <stdlib.h>

struct elem{
    int n;
    elem *prox;
};

struct fila{
    elem *inicio, *fim;
}nop;

void iniciar(fila *d){
    d->inicio = (elem*) malloc(sizeof(elem));
    d->fim = (elem*) malloc(sizeof(elem));
    d->inicio->prox = d->fim;
    d->fim->prox = NULL;
}

void inserir(fila *d, int x){
    elem *novo = (elem*) malloc(sizeof(elem));
    novo->n = x;
    novo->fim->prox = NULL;

    if(d->inicio->prox == NULL)
        d->inicio->prox = novo;
    else{
        d->fim->prox = novo;
        d->fim = novo;
    }
}

void deletar(fila *d){
    if(d->inicio->prox = NULL)
        printf("Lista vazia")
    else{
        elem *apg;
        apg = d->inicio->prox;
        d->inicio->prox = apg->prox;
        printf("%d", d->n);
        free(apg);
    }
}

int main(){
    int x;

    iniciar(&nop);

    scanf("%d", &x);

    inserir(&nop, x);

    deletar(&nop);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

所以,这个问题很模糊,但是我确实看到了一个问题,那就是你得到的标签和typedef混淆了。例如:

void inserir(fila *d, int x)

实际上应该定义为

void inserir(struct fila *d, int x)

因为您将fila定义为标签。另一种方法是使用typedef关键字声明结构fila(在下面列出)

typedef struct elem{
int n;
struct elem *prox;
} element;

typename struct {
element *inicio, *fim;
}fila nop;

答案 1 :(得分:0)

此代码中的大多数错误都是因为您使用elemfila作为类型名称。然而,这些类型没有定义。引用struct类型时,您需要在其前面添加struct关键字。

你可以通过为每一个添加typedef来解决这个问题,以便它们可以仅通过类型名称引用:

typedef struct elem elem;
typedef struct fila fila;

在包含后,将这些行放在源文件的顶部。这将解决大多数编译问题。其余的你应该能够弄清楚自己。