Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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
将typedef从标头传递到源-C_C_Data Structures_Typedef_Ansi C - Fatal编程技术网

将typedef从标头传递到源-C

将typedef从标头传递到源-C,c,data-structures,typedef,ansi-c,C,Data Structures,Typedef,Ansi C,我有以下main.c文件: #include <stdio.h> #include <stdlib.h> #include <wctype.h> #include "lista.h" int main(int argc, char *argv[]) { struct nod *root = NULL; root = init(root); return 0; } 最后是lista.c,它是: #include<stdio.

我有以下main.c文件:

#include <stdio.h>
#include <stdlib.h>
#include <wctype.h>

#include "lista.h"

int main(int argc, char *argv[])
{
    struct nod *root = NULL;
    root = init(root);

    return 0;
}
最后是lista.c,它是:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#include "lista.h"

nod* init(nod *root)
{
    root = NULL;
    return root;
}

void printList(nod *root)
{
    //We don't want to change original root node!
    nod *aux = root;

    printf("\n=== Printed list =====\n");
    while (aux != NULL)
    {
        printf(aux->Value);
        aux = aux->Next;
    }
    puts("\n");
}
#包括
#包括
#包括
#包括“lista.h”
nod*init(nod*root)
{
root=NULL;
返回根;
}
无效打印列表(节点*根)
{
//我们不想更改原始根节点!
nod*aux=根;
printf(“\n===打印列表===\n”);
while(aux!=NULL)
{
printf(辅助->值);
aux=aux->Next;
}
卖出(“\n”);
}
即使在包含了头文件之后,我也会遇到三个错误,它们是: 未知类型名称“nod”

如何使lista.h中的typedef显示在lista.c上


我就是搞不懂这里发生了什么。

看看你的lista.h头文件:

#ifndef LISTA_H_INCLUDED
#define LISTA_H_INCLUDED

#include "lista.c"

[..]

#endif // LISTA_H_INCLUDED

您正在包括lista.c,这是您根本不应该做的。出现错误,因为当时尚未定义
nod

请查看您的lista.h头文件:

#ifndef LISTA_H_INCLUDED
#define LISTA_H_INCLUDED

#include "lista.c"

[..]

#endif // LISTA_H_INCLUDED

您正在包括lista.c,这是您根本不应该做的。出现错误,因为当时还没有定义
nod

lista.h
中删除
#include“lista.c”
。在它真正定义
nod
之前,它会把所有
lista.c
内容(参考
nod
)都拉进去。通常,
.h
文件从不包含
.c
。这是另一种方式。永远不要把C文件作为规则。既不在标题中也不在源中。从
lista.h
中删除
#include“lista.c”
。在它真正定义
nod
之前,它会把所有
lista.c
内容(参考
nod
)都拉进去。通常,
.h
文件从不包含
.c
。这是另一种方式。永远不要把C文件作为规则。既不在标题中,也不在源中。