Castear estructura en un archivo.c distinto al main

Iniciado por Fabi0lo, 19 Noviembre 2012, 21:36 PM

0 Miembros y 2 Visitantes están viendo este tema.

Fabi0lo

Buenas, estoy haciendo una tarea y de momento me topé en una duda que no se como resolver.

Necesito ingresar un tipo de estructura como parámetro pero con (void*) a un archivo.c distinto al main.c

Esto es lo que tengo definido en el main.c:
struct str{
int numLinea;
char* inputFile;
} Estructura;


y esto es lo que recibo en lectura.c:
char** leer(void* Estructura){
str* Parquete = (str*) Estructura;


Al compilar, me da error, la estructura str está definido en el main.c, pero no en lectura.c

PD: Necesito hacer uso de void*, ya que (tengo entendido que) con pthread funciona así.

¿Tengo que redefinir la estructura en lectura.c? no importa si sea redundante??

rir3760

Cita de: Fabi0lo en 19 Noviembre 2012, 21:36 PM¿Tengo que redefinir la estructura en lectura.c? no importa si sea redundante?
Tienes que incluir la declaración del tipo:
struct str {
int numLinea;
char* inputFile;
};

En todas las unidades (archivos de código fuente) que así lo requieran (donde se declaren variables de ese tipo).

La convención en estos casos es colocar las declaraciones de tipos y macros en archivos (usualmente con la extensión ".h") y utilizar la directiva:
#include "algun_nombre"
Para sustituir esa linea con el contenido del archivo indicado (las declaraciones).

Y no hay problema con tener la declaración en varios archivos.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Fabi0lo

Gracias, ahora que lo intento (como siempre) me esta tirando una pifia

struct str{
int numLinea;
char* inputFile;
};

struct str Estructura = { 0, "Hola" };

void* getStruct(){
Estructura.numLinea++;
return (void*) Estructura;
}


con gcc -c Input.cme tira este error Input.c: En la funcion 'getStruc':
Input.c:10:2: error: no se puede convertir a un tipo puntero

y eso que aun no implemento la cabecera...

rir3760

El error se emite porque "Estructura" es una variable, no puedes (en la función "getStruct") utilizarla como si fuera una dirección de memoria:
struct str Estructura = { 0, "Hola" };

/* ... */

return (void*) Estructura; /* <== */


Si la intención es retornar la dirección en memoria de esa variable debes utilizar el operador "dirección de" (el '&'):
struct str Estructura = { 0, "Hola" };

/* ... */

return &Estructura;


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language