2010-01-20 16 views
33

yo soy bastante nuevo en C.dos o más tipos de datos en la declaración especificadores de error

estoy recibiendo este error:

incompatible implicit declaration of built-in function ‘malloc’

Incluso cuando arreglo al código basado en las respuestas de incluir <stdlib.h>, todavía consigo:

two or more data types in declaration specifiers

al tratar de hacer esto:

struct tnode 
{ 
    int data; 
    struct tnode * left; 
    struct tnode * right; 
} 

struct tnode * talloc(int data){ 
    struct tnode * newTnode; 
    newTnode = (struct tnode *) malloc (sizeof(struct tnode)); 
    newTnode->data = data; 
    newTnode->left = NULL; 
    newTnode->right = NULL; 
    return newTnode; 
} 

¿Cómo puedo solucionarlo?

+9

Ok, no es justo para mover los postes de la portería después de la gente tiene ya (correctamente) respondido a su primera pregunta. Ahora, las respuestas que mencionan 'stdlib.h' parecen responder una pregunta diferente. –

+1

Se modificó la pregunta para que no se invalidaran todas las respuestas anteriores. Puede ser una buena idea tener esto en cuenta para más adelante, @SuperString. – paxdiablo

+0

Y ahora esta pregunta logró llegar a la parte superior de los resultados de Google. Mala forma al cambiar esta pregunta en parte. –

Respuesta

93

usted tiene que poner ; detrás de la declaración struct:

struct tnode 
{ 
    int data; 

    struct tnode * left; 
    struct tnode * right; 
}; // <-- here 
+7

+1 para la respuesta correcta. Los desaparecidos ; hace que el compilador piense que está tratando de declarar una variable llamada struct de tipo struct tnode. –

4

"Declaración implícita" significa que está intentando usar una función que no se ha declarado formalmente.

Es probable que haya olvidado: #include <stdlib.h> que incluye la declaración de función para malloc.

+0

en realidad es un error diferente – SuperString

+0

Declaración implícita significa que siguió adelante y usó una función sin que el compilador lo supiera antes de tiempo. Entonces el compilador asume que la función devuelve un int (solo está adivinando). Pero malloc realmente devuelve vacío *, entonces la suposición y la realidad entran en conflicto. –

+8

@SuperString: No es justo. Fue la respuesta correcta a tu pregunta original. – jamesdlin

1

asegurarse de que ha incluido el archivo de cabecera que contiene la definición de malloc():

#include "stdlib.h" 
2

¿Tiene el archivo de cabecera apropiada incluido?

Es decir, ¿hay una línea en la parte superior de su archivo que dice

#include <stdlib.h> 

Espero que esto ayude.

7

Su error original fue porque estaban tratando de utilizar malloc sin incluir stdlib.h.

Su nuevo error (que realmente debería haber sido una pregunta separada ya que ha invalidado todas las otras respuestas hasta la fecha) es porque le falta un carácter de punto y coma al final de la definición struct.

Este código compila bien (aunque sin main):

#include <stdlib.h> 

struct tnode 
{ 
    int data; 

    struct tnode * left; 
    struct tnode * right; 
}; 

struct tnode * talloc(int data){ 
    struct tnode * newTnode; 
    newTnode = (struct tnode *) malloc (sizeof(struct tnode)); 
    newTnode -> data = data; 
    newTnode -> left = NULL; 
    newTnode -> right = NULL; 
    return newTnode; 
} 
Cuestiones relacionadas