0

我正在尝试编写一个函数,该函数将指向我创建的类型的指针作为参数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]

谢谢你的帮助!

4

2 回答 2

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

于 2013-04-17T06:40:05.083 回答
0

你不能在主函数中声明你的函数。将函数原型和声明放在主循环之外。函数原型 ( void printList(NodeType *);) 应在函数实际使用之前声明。还要在 main 之外和函数之前声明您的结构。

您的 typedef 也有错误

       typedef struct NodeTag{
        char* Airport;
        NodeTag * Link; <-- missing struct prefix              
        } NodeType;
于 2013-04-17T06:51:39.753 回答