将typedef从标头传递到源-C
我有以下main.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.
#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文件作为规则。既不在标题中,也不在源中。