error: desreferenciación del puntero a tipo incompleto

Tengo las siguientes partes de código:

typedef struct Object* ObjectP; ObjectP CreateObject(void *key) { printf("GOT %d\n",(*(int*) key)); ObjectP objP = (ObjectP) malloc(sizeof(Object)); if (objP == NULL) { //TODO ReportError(MEM_OUT); return NULL; } objP->_key = key; objP->_next = NULL; objP->_numInChain = 1; return objP; 

}

 typedef struct Object { ObjectP _next; void* _key; int _numInChain; } Object; 

y en otro archivo:

 void IntPrint(const void *key) { assert(key != NULL); printf("%d",*((const int*)key)); } 

y en otro archivo tengo el main ():

 int main(int argc, char* argv[]) { int* key = (int*) malloc(sizeof(int)); *key = 20; ObjectP a = CreateObject(key); IntPrint(a->_key); //THIS DOESN'T COMPILE return 0; } 

IntPrint no comstack. escribe:
error: desreferenciación del puntero a tipo incompleto
y no puedo entender por qué, porque IntPrint recibe void * y una tecla -> _ también es void *.

¡Gracias!

Publicó un montón de piezas de código virtualmente irrelevantes, pero omitió el más importante: ¿qué es ObjectP y cómo se define? El comstackdor le dice que está definido como un puntero a un tipo incompleto. Ese es tu problema. Es imposible decir qué es exactamente lo que está mal con la definición sin verla realmente.

Después de la edición: su problema es que la definición de struct Object no es visible en el punto en el que intenta acceder a la a->key (in.e. en main ). O te olvidaste de incluirlo o algo así. ¿La definición de struct Object de struct Object encuentra en el mismo archivo de encabezado que la definición de ObjectP ?

¿Dónde tienes definido ObjectP? Sugiero no declararlo antes de que el objeto esté completamente definido:

 typedef struct Object { struct Object* _next; void* _key; int _numInChain; } Object; typedef Object* ObjectP; 

De esta manera siempre debería ser seguro usar ObjectP. Sin embargo, sin que publiques más código, esto es solo una suposición ciega.

Prueba lo siguiente en tu función main :

 IntPrint((const void *) a->_key); 

La definición de _key en la estructura Object no tiene la constant modificadora y eso podría causar una advertencia o un error dependiendo de las marcas que esté utilizando al comstackr.