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