elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Problema con modularidad en programa en c en: 3 Marzo 2011, 00:31 am
Gracias por tu ayuda, efectivamente si coloco "header.h" en el archivo "header.c"
funciona perfecto, pero como la creacion de la lista la invoco desde el archivo
"main.c" tambien debo colocar "header.h" en el archivo "main.c", es decir debo
incluir "header.h" en 2 archivos distintos. En cambio cuando creo y utilizo otros modulos que no usan ningun tipo de struct definido por mi, solo basta con hacer una referencia en el archivo "main.c".

Existirá una forma alternativa de colocar la directiva "header.h" solo en el archivo "main.c" y no tener que colocarlo en todos los archivos que usan ese struct. ????

Nuevamente se agradece tu ayuda
2  Programación / Programación C/C++ / Problema con modularidad en programa en c en: 2 Marzo 2011, 22:21 pm
Hola a todos, ojalá alguien me pueda ayudar.

Resulta que quiero implementar una lista enlazada simple en c, para
la cual no tengo problemas si coloco todo en un solo archivo (en main.c), pero al crear un archivo header.h y otro header.c el programa ya ni me funciona.

El codigo es el siguiente:

ARCHIVO 1: "main.c"
--------------------------------------------------------------------------------

#include <stdlib.h>
#include "header.h"

int main()
{
struct nodoCliente *puntero = crearNodoCliente();
Cliente nuevo;
nuevo.rut = 126;
nuevo.edad = 14;
nuevo.nombre = "pablo";
Cliente nuevo2;
nuevo2.rut = 987;
nuevo2.edad = 22;
nuevo2.nombre = "diego";

insertarNodoCliente( nuevo, puntero );
insertarNodoCliente( nuevo2, puntero );

printf( "%s\n", puntero->siguiente->cliente.nombre);
printf( "%s\n", puntero->siguiente->siguiente->cliente.nombre);

return 0;
}--------------------------------------------------------------------------------


ARCHIVO 2: "header.h"
--------------------------------------------------------------------------------

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

/* Nuevo tipo de dato llamado Cliente */

typedef struct {

int long unsigned rut;
char *nombre;
char *apellido;
int edad;
char *direccion;
int long unsigned fono;
char *email;

} Cliente;


/* Prototipos de las funciones */

struct nodoCliente *crearNodoCliente( void );

void insertarNodoCliente( Cliente, struct nodoCliente * );


/* Nuevo tipo de dato llamado nodoCliente */

struct nodoCliente {

Cliente cliente;
struct nodoCliente *siguiente;

};

#endif // HEADER_H_INCLUDED--------------------------------------------------------------------------------


ARCHIVO 3: "header.c"
--------------------------------------------------------------------------------


/* Inicializa un nodo */

struct nodoCliente *crearNodoCliente( void ) {

struct nodoCliente *ptrCliente;
ptrCliente = ( struct nodoCliente * )malloc( sizeof( struct nodoCliente ) );
ptrCliente -> siguiente = NULL;

return ptrCliente;

}

/* Insertar nuevo nodo cliente luego del nodo al que
apunta el segundo parámetro */

void insertarNodoCliente( Cliente nuevoCliente, struct nodoCliente *ptrLista ) {

struct nodoCliente *ptrNuevo = ptrLista -> siguiente;
ptrLista -> siguiente = ( struct nodoCliente * )malloc( sizeof( struct nodoCliente ) );
ptrLista -> siguiente -> cliente = nuevoCliente;
ptrLista -> siguiente -> siguiente = ptrNuevo;

}--------------------------------------------------------------------------------

Uso el IDE codeblocks y el compilador GCC, y cuando compilo me sale
el siguiente error:

error: invalid application of `sizeof' to incomplete type `nodoCliente'

pero si pongo el contenido del archivo "header.c" al final del archivo "main.c" y luego borro header.c el programa funciona perfectamente.

El programa tambien me funciona bien si coloco 2 veces la directiva #include "header.h" una al comienzo del archivo "main.c" y otra al inicio
del archivo "header.c" pero creo que no es la idea estar colocando la misma cabecera en todos los archivos.

 

Gracias
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines