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??
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
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.c
me 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...
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