Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Fabi0lo en 19 Noviembre 2012, 21:36 PM

Título: Castear estructura en un archivo.c distinto al main
Publicado por: Fabi0lo en 19 Noviembre 2012, 21:36 PM
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??
Título: Re: Castear estructura en un archivo.c distinto al main
Publicado por: rir3760 en 19 Noviembre 2012, 23:39 PM
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
Título: Re: Castear estructura en un archivo.c distinto al main
Publicado por: Fabi0lo en 20 Noviembre 2012, 19:47 PM
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...
Título: Re: Castear estructura en un archivo.c distinto al main
Publicado por: rir3760 en 20 Noviembre 2012, 23:29 PM
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