Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误:未知类型名称和警告:函数的隐式声明_C - Fatal编程技术网

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

C 错误:未知类型名称和警告:函数的隐式声明,c,C,使用链表在c中实现队列时遇到问题。我已经在stackoverflow和其他网站上阅读了很多关于它的其他问题,但我仍然不知道如何解决我的代码的这个问题。任何人,请帮帮我? 这里是我的c代码: #include <stdio.h> #include <stdlib.h> struct elem{ int n; elem *prox; }; struct fila{ elem *inicio, *fim; }nop; void iniciar(fi

使用链表在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;
}

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

void inserir(fila *d, int x)
实际上应该被定义为

void inserir(struct fila *d, int x)
因为你把fila定义为一个标记。另一种方法是用下面的typedef关键字liek声明结构fila

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

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

这段代码中的大多数错误是因为您使用elem和fila作为类型名。但是,这些类型没有定义。引用结构类型时,需要在其前面加上struct关键字

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

typedef struct elem elem;
typedef struct fila fila;

在includes之后,将这些行放在源文件的顶部。这将解决大多数汇编问题。剩下的你应该能自己搞定。

嗨,欢迎来到Stackoverflow。这个问题没有足够的实际细节。请在问题正文中填写错误信息,并使用标题给出一般说明。此外,请举例说明您的尝试。在没有适当上下文的情况下回答问题真的很困难。我需要在C中使用typedef。我刚刚试着编译你的代码。它甚至不是逻辑的,或者可能是,但它甚至不编译。我建议您首先解决所有的编译问题,然后带着一个真正的问题回来,即说明到底哪里出了问题,哪里出了问题,哪段代码是相关的,并生成一个最小的工作示例。你给我们的东西有十几个编译问题。在那之前,我投票认为这个问题过于宽泛。您还应该阅读有关typedefI的内容。我以前尝试过它,但它仍然没有解决问题。@JeffersonCarlosLimadaCosta它不会解决所有问题您还引用了无效成员、缺少分号等,但它解决了您在问题中提到的问题。如果您不理解所遇到的任何新错误,请使用修改后的代码更新您的问题,但不要删除现有代码和新错误。