Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Estructuras

Estas en el tema de Estructuras en el foro de C/C++ en Foros del Web. Tengo que realizar un proyecto para el cual cuento con varios archivos; tanto *.c como *.h. Mi problema viene cuando tengo que referirme a alguna ...
  #1 (permalink)  
Antiguo 14/11/2008, 07:25
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Estructuras

Tengo que realizar un proyecto para el cual cuento con varios archivos; tanto *.c como *.h. Mi problema viene cuando tengo que referirme a alguna estructura que se encuentra en otro archivo diferente al que estoy usando para escribir el código. Sí que me reconoce las estructuras que tengo creadas, pero al referirme a cada parte suya me da errores. Os paso ese trozo del código:

Código:
	printf("Codigo de linea: ");		gets(linea->ID);
	printf("Nombre de la linea: ");		gets(linea->nombre);
	printf("Laborales (0), Sabados(1), Festivos(3): "); scanf("%d",&linea->servicio.tipo);
	printf("Ruta: ");	scanf("%s %s", &linea->Ruta.origen, linea->Ruta.destino);
	printf("Hora de salida: ");		scanf("%d:%d", &linea->horIni.hora, linea->horFin.min);
	printf("Salida desde: ");	gets(linea->sal);
	printf("Hora de finalizacion: ");	scanf("%d:%d", &linea->horFin.hora, linea->horFin.min);
	printf("Llegada a: ");	gets(linea->lleg);
	void anadirParada(TipoParada *parada);
Pues bien, en este código me da errores cuando leo lo que se ha introducido por teclado, si es que me tengo que referir a una estructura que se encuentra dentro de otra. Por ejemplos, con este código:
scanf("%d",&linea->servicio.tipo);
Me dice que tengo un error de sintaxis: '.tipo' : el operando izquierdo señala a 'struct'; utilice '->'

He probado a cambiar '.' por '->', y se me soluciona el error...

Lo que no entiendo es por qué en ese caso se tiene que escribir así...pero en los otros, q son del mismo estilo (p.e. scanf("%s %s", &linea->Ruta.origen, linea->Ruta.destino);) no me pide que lo cambie.

La estructura a la que estoy llamando es esta:
Código:
struct sServicio
{
	unsigned char tipo; // 0: laborables; 1: sábados; 2: festivos
	int frecuencia; // frecuencia en minutos
	HORA primserv;//primer servicio
	HORA ultserv;//	ultimo servicio
};

typedef struct sServicio TipoServicio;

struct sTipoRuta 
{
	TipoParada origen, destino;
	
};

typedef struct sTipoRuta TipoRuta;

struct sTipoLineaBus
{
	char ID[10]; // identificador de linea (L1, L2, C1,...)
	char nombre[50]; // nombre de la linea (p.e. COVARESA - SAN PEDRO REGALADO)
	TipoServicio servicio[3]; // laborables , sábados, festivos
	TipoRuta Ruta; // ruta que sigue el autobus
	HORA horIni; //hora de salida de la linea
	char sal[20]; //salida de la linea
	struct sListaParadas paradas; //enumeracion de paradas (hasta 15, si hacen falta mas se añaden despues)
	char lleg[20]; //llegada de la linea
	HORA horFin; //hora de finalizacion
	HORA perLab; //periodicidad de repeticion de paradas dias laborables
	HORA perFin; //periodicidad de repeticion de paradas fines de semana-n
}; //datos de una linea de bus 
	
typedef struct sTipoLineaBus TipoLineaBus;
Utilizo Visual C++ 2008 Express Edition, y el lenguaje es C

Muchas gracias de antemano!

Última edición por calathea; 14/11/2008 a las 07:37 Razón: cambio de duda
  #2 (permalink)  
Antiguo 14/11/2008, 14:09
Avatar de post-it  
Fecha de Ingreso: noviembre-2008
Mensajes: 17
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Estructuras

Hola, estaría bien si nos pegaras los errores de compilación que da.

Normalmente cuando se trabaja con proyectos separados en distintos ficheros tienes dos opciones a la hora de "unir" el proyecto:
  • Utilizar uno o varios ficheros Makefile (y utilizar algún programa make para el/ellos). Es la opción recomendada.
  • Incluir en los includes que hagas las rutas relativas a tus ficheros de cabecera (es decir, por ejemplo utilizar #include "../includes/foo.h" en vez de #include "foo.h")

Saludos
  #3 (permalink)  
Antiguo 15/11/2008, 04:25
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Estructuras

Utilizo los #include para llegar a los otros archivos...porque es lo que he dado por ahora...asik no puedo utilizar lo otro.

La duda era q por qué con unas estructuras me daba error...pero con otras no... El error es el de sintaxis q mencione antes...Pero sólo me sale con esa llamada a la estructura...pero no con las otras...Eso es lo que no entiendo: ¿cómo se cuándo tengo que emplear '->' y cuándo '.'?

Cita:
con este código:

scanf("%d",&linea->servicio.tipo);

Me dice que tengo un error de sintaxis: '.tipo' : el operando izquierdo señala a 'struct'; utilice '->'

He probado a cambiar '.' por '->', y se me soluciona el error...

Lo que no entiendo es por qué en ese caso se tiene que escribir así...pero en los otros, q son del mismo estilo (p.e. scanf("%s %s", &linea->Ruta.origen, linea->Ruta.destino);) no me pide que lo cambie.
  #4 (permalink)  
Antiguo 15/11/2008, 04:35
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Estructuras

Cita:
Iniciado por calathea Ver Mensaje
Eso es lo que no entiendo: ¿cómo se cuándo tengo que emplear '->' y cuándo '.'?

-> : puntero a una estructura.
. : variable de tipo estructura.
  #5 (permalink)  
Antiguo 15/11/2008, 05:27
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Estructuras

Muchas gracias!! otra dudilla acercade ese trozo de código trambién:

¿¿Cómo puedo llamar a la funcion anadirParada que se encuentra en otro archivo??

Código:
	printf("Codigo de linea: ");		gets(linea->ID);
	printf("Nombre de la linea: ");		gets(linea->nombre);
	printf("Laborales (0), Sabados(1), Festivos(3): "); scanf("%d",&linea->servicio.tipo);
	printf("Ruta: ");	scanf("%s %s", &linea->Ruta.origen, linea->Ruta.destino);
	printf("Hora de salida: ");		scanf("%d:%d", &linea->horIni.hora, linea->horFin.min);
	printf("Salida desde: ");	gets(linea->sal);
	printf("Hora de finalizacion: ");	scanf("%d:%d", &linea->horFin.hora, linea->horFin.min);
	printf("Llegada a: ");	gets(linea->lleg);
	void anadirParada(TipoParada *parada); 
Declarándolo así me da error: error de sintaxis : falta ';' delante de 'tipo'

Gracias x todo!!
  #6 (permalink)  
Antiguo 15/11/2008, 11:24
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Estructuras

Cita:
Iniciado por calathea Ver Mensaje
¿¿Cómo puedo llamar a la funcion anadirParada que se encuentra en otro archivo??

Código:
 void anadirParada(TipoParada *parada); 
Declarándolo así me da error: error de sintaxis : falta ';' delante de 'tipo'

Para llamar a una función no tienes que especificar el tipo de retorno, eso es sólo para la declaración.
  #7 (permalink)  
Antiguo 15/11/2008, 12:08
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Estructuras

entonces me da un error...y un warning...

error C2440: 'función' : no se puede realizar la conversión de 'TipoLineaBus' a 'ListaParadas *'
warning C4024: 'modificarUnaParada' : tipos distintos para el parámetro formal y el parámetro real 1
  #8 (permalink)  
Antiguo 15/11/2008, 13:47
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Estructuras

Es que para llamar a la función tampoco tienes que especificar el tipo de parámetros que le pasas... :)

En tu caso la llamada a esa función sería del tipo:

Código:
     anadirParada(&variableDeTipoParada);
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:10.