我正在研究这个代码并且我在几个函数上得到冲突的类型,我将指针传递给某些结构作为参数,我看不出什么是错的,例如,在函数集中:
cliente *aux = f->inicio;
其中cliente是一个结构,但当我在另一个函数中用as:
调用它时tratar_doc(aux);
其签名是:
void tratar_doc(cliente *c)
我收到此警告:'tratar_doc'[默认启用] |
的冲突类型即使我的函数接受了cliente类型的指针以及作为参数传递的是一个cliente类型的指针。
编辑:这是一个重现问题的代码,最简单的我可以得到:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct documento{
int chave;
char nome[50];
struct documento *prox;
}documento;
typedef struct cliente{
int conta;
char nome[50];
char tipo;
struct pilha *doc;
struct cliente *prox;
}cliente;
typedef struct fila{
int tamanho_fila;
struct cliente *inicio;
struct cliente *fim;
}fila;
typedef struct pilha{
int tamanho_doc;
struct documento *primeiro;
struct documento *ultimo;
}pilha;
void atender(fila *f){
cliente *aux = f->inicio;
cliente *aux2 = f->fim;
int i;
for(i = 0; i < ((f->tamanho_fila) - 1); i++){
aux2 = aux2->prox;
}
f->inicio = aux2;
tratar_doc(aux);
free(aux);
}
void tratar_doc(cliente *c){
pilha *aux = c->doc;
}
警告:'tratar_doc'的冲突类型[默认启用] |
答案 0 :(得分:1)
如果没有函数的前向声明,就会发生此类错误。如果没有前向声明,则第一次编译器遇到该函数时,它可以为其分配一个类型。定义函数时,此类型可能与指定的类型冲突。
放置
void tratar_doc(cliente *c);
在任何其他提及函数之前。这些前向声明通常放在包含的头文件中。