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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con modularidad en programa en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con modularidad en programa en c  (Leído 3,438 veces)
dieg007

Desconectado Desconectado

Mensajes: 2


Ver Perfil
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


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Problema con modularidad en programa en c
« Respuesta #1 en: 2 Marzo 2011, 23:22 pm »

EDIT: Dije cualquier cosa, mis disculpas. Ahora reviso!

Bien, por lo que me he fijado, el error que marcas debe salir en el header.c. Pues el problema es simple, desde el header.c no tienes ninguna referencia hacia el struct NodoCliente. Este tipo de dato está definido en el header.h, entonces debes incluir una referencia. Esto es, debes incluir el "header.h" en el "header.c"

Más específicamente, en el header.c escribes
Código
  1. #include "header.h"

Cuéntame como te fue. Espero que hayas entendido.


« Última modificación: 2 Marzo 2011, 23:51 pm por Ferno » En línea

dieg007

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema con modularidad en programa en c
« Respuesta #2 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
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Problema con modularidad en programa en c
« Respuesta #3 en: 3 Marzo 2011, 01:10 am »

No veo cual es el problema de incluir el header.h en el main y en el .c respectivo :P

Y el tema es simple, si desde el main utilizas alguna función o tipo de dato definido en cualquiera de tus headers, debes incluirlo. Desconozco otro camino.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema, con programa->HELP PLZ « 1 2 »
Programación Visual Basic
newbY 12 3,546 Último mensaje 22 Noviembre 2006, 18:15 pm
por newbY
programación dev c++ modularidad
Programación C/C++
armando7321 1 3,134 Último mensaje 2 Septiembre 2011, 04:38 am
por LearningSpanishProgrammer
El regreso de la modularidad
Noticias
wolfbcn 0 972 Último mensaje 28 Abril 2015, 22:27 pm
por wolfbcn
Modularidad
Programación C/C++
cridve 1 1,381 Último mensaje 30 Marzo 2019, 22:10 pm
por K-YreX
Realizar el programa utilizando modularidad (procedimientos y funciones)
Programación C/C++
facundotorres7392 1 1,270 Último mensaje 23 Octubre 2020, 10:49 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines