没有用于通过链接声明函数的链接的类型

时间:2013-04-17 06:35:30

标签: c

我正在尝试编写一个函数,该函数将指向我使用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]

感谢您的帮助!

2 个答案:

答案 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;