我正在尝试编写一个函数,该函数将指向我使用typedef
创建的类型NodeType
作为参数的指针。我模糊地知道typedef
名称没有联系。当NodeType
类型的两个实例看起来都在同一个翻译单元中时,我不确定为什么会出现以下错误。
以下是代码:
#include <stdio.h>
int main(){
typedef struct NodeTag{
char* Airport;
NodeTag * Link;
} NodeType;
//Declare print function
void printList(NodeType *);
void printList(NodeType * L){
//set N to point to the first element of L
NodeType * N = L;
//if the list is empty we want it to print ()
printf("( ");
//while we are not at the Link member of the last NodeType
while(N != NULL){
//get the Airport value printed
printf("%s", N->Airport);
//advance N
N= N->Link;
if(N != NULL){
printf(", ");
}
else{
//do nothing
}
}
printf(")");
}
return 0;
}
这是我遇到的错误:
linkedlists.c: In function 'int main()':
linkedlists.c: error: type 'NodeType {aka main()::NodeTag} with no linkage used
to declare function 'void printList(NodeType*) with linkage [-fpermissive]
感谢您的帮助!
答案 0 :(得分:0)
您的printList
函数是在main
的正文中定义的,这会让编译器感到困惑。将printList
移到main
的正文之外,如下所示:
#include <stdio.h>
typedef struct NodeTag{
char* Airport;
NodeTag * Link;
} NodeType;
//Declare print function
void printList(NodeType *);
int main(){
return 0;
}
void printList(NodeType * L){
//set N to point to the first element of L
NodeType * N = L;
//if the list is empty we want it to print ()
printf("( ");
//while we are not at the Link member of the last NodeType
while(N != NULL){
//get the Airport value printed
printf("%s", N->Airport);
//advance N
N= N->Link;
if(N != NULL){
printf(", ");
}
else{
//do nothing
}
}
printf(")");
}
完成此操作并进行编译后,您需要确定在printList
内调用main
的方式和位置。
答案 1 :(得分:0)
你无法在main函数中声明你的函数。将函数原型和声明放在主循环之外。应该在实际使用函数之前声明函数原型(void printList(NodeType *);
)。同时在main之外和函数之前声明你的结构。
你的typedef中也有错误
typedef struct NodeTag{
char* Airport;
NodeTag * Link; <-- missing struct prefix
} NodeType;