C/Visual C - Problema con modularidad de programa en C

 
Vista:

Problema con modularidad de programa en C

Publicado por dieg007 (1 intervención) el 02/03/2011 22:10:54
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con modularidad de programa en C

Publicado por Oagimenez (15 intervenciones) el 09/03/2011 20:57:08
Mira. Espero que mi comentario te ayude.
La verdad que esta desordenado lo que estas escribiendo. Bien por querer modularizar ya que ello va a implicar ordenar tambien tus archivos fuentes. En primer lugar te sugiero usar el archivo include como lo estas usando. El programa c que queres agregar lo podes poner para que lo tome el compilador desde un projet y no dentro del main. Y ademas te sugiero que consideres la declaracion de extern en las variables para evitar esos errores. No conozco a fondo tu compilador pero espero haber sido de utilidad. Sino me consultas de nuevo. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con modularidad de programa en C

Publicado por Tom (619 intervenciones) el 03/03/2011 10:47:19
Los archivos de cabecera hay que ponerlos donde sean necesarios :) y hay una lógica para ello.
En tu caso, sí, hay que poner header.h tanto en main.c como en header.c.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar