C 将指针传递给数组中的结构体时出现问题

Der*_*son 1 c arrays struct pointers

我正在将一个程序从 Pascal 翻译成 C。我已经很多年没有使用 C 语言了。这是相关的代码片段:

typedef struct querec *queptr;
struct querec {
    char item;
    queptr next;
};
struct queue {
    queptr front,
    rear;
};
struct queue qnum[5];
char item;

const char remove(struct queue *q)
{
    queptr p;
    char remove_result;

    p = q->front;
    remove_result = p->item;
    q->front = p->next;
    if (q->front == NULL)
        q->rear = NULL;
    return remove_result;
}

main()
{
    ...
    item = remove(&qnum[3]);
}
Run Code Online (Sandbox Code Playgroud)

它不会在 Visual Studio 2015 中编译,报告以下内容:

Warning C4133   'function': incompatible types - from 'queue *' to 'const char *'
Error   C2373   'remove': redefinition; different type modifiers
Run Code Online (Sandbox Code Playgroud)

pad*_*ddy 5

C语言没有函数重载,而且恰好int remove(const char*)是标准C库函数。

要修复该错误,您需要以其他方式调用您的函数,例如queue_remove

请注意,当编译器给出这样的错误时,它通常会输出附加信息,显示冲突的定义。在这种情况下,它应该向您显示在相关内部文件remove中声明的内容。stdio.h尽管感觉信息过多,但花时间仔细阅读该消息总是值得的。