Título: C++. Cargar una matriz de struct usando archivos de cabeceras Publicado por: LeoXsiempre en 8 Abril 2015, 03:07 am Hola estoy trabajando es c++ desde hace poco tiempo, quise hacer algo mas jugado, pero nose que estoy haciendo mal. Arme una matriz de struct pero nose si estoy usando mal las cabeceras o utilizando mal los typedef. Si alguien me puede ayudar se lo agradecería mucho.
En funciones.h tengo: #include <iostream> #include <string> #include <cstdlib> using namespace std; typedef struct {int padron; string nombre;}datos; typedef datos alumno[2][2]; void cargarmatriz(alumno alu); void imprime(alumno alu); En funciones.cpp tengo: #include <iostream> #include <string> #include <cstdlib> #include "funciones.h" using namespace std; void cargarmatriz(alumno alu) { for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { cout << "padron: " << endl; cin >> alu[j].padron; cout << "nombre " << endl; cin >> alu[j].nombre; cout << endl; } } } void imprime(alumno alu) { for(int r=0; r<2; r++) { for(int t=0; t<2; t++) { cout << alu[r][t].padron << endl; cout << alu[r][t].nombre << endl; } } } Y finalmente en main.cpp: #include <iostream> #include <string> #include <cstdlib> #include "funciones.h" using namespace std; int main() { typedef struct {int padron; string nombre;}datos; typedef datos alumno[2][2]; alumno alu; cargarmatriz(alu); imprimir(alu); return 0; } El error me lo marca en cargarmatriz y el mensaje es: ...main.cpp|26|error: cannot convert 'main()::datos (*)[2]' to 'datos (*)[2]' for argument '1' to 'void cargarmatriz(datos (*)[2])'| Título: Re: C++. Cargar una matriz de struct usando archivos de cabeceras Publicado por: eferion en 8 Abril 2015, 08:17 am Bienvenido al foro.
Lo primero, el código lo tienes que decorar con las etiquetas GeSHi. Son las normas del foro y, además, mejora su legibilidad. Un consejo: en C++ no hace falta usar typedef para declarar las estructuras o las clases. Las dos líneas de código siguientes son equivalentes en C++: Código
Vamos con tu error. A ver, typedef se usa para definir un alias... si el alias lo defines en un archivo de cabecera, todos los ficheros que incluyan dicha cabecera tendrán acceso a dicho alias. En tu caso el problema es que estás definiendo dos veces el alias "datos"... uno a nivel global y otro dentro del main. El conflicto que esto genera se basa en que el alias del main únicamente tiene validez dentro del main... y no solo eso... no solo su ámbito es diferente, también lo es su "nombre interno" de cara al compilador C++: Citar main.cpp|26|error: cannot convert 'main()::datos (*)[2]' to 'datos (*)[2]' for argument '1' to 'void cargarmatriz(datos (*)[2])'| es básicamente lo que te está diciendo el mensaje de error... no sabe cómo convertir main::datos a ::datos. La solución es tan simple como quitar el typedef del main. Un saludo. Título: Re: C++. Cargar una matriz de struct usando archivos de cabeceras Publicado por: LeoXsiempre en 10 Abril 2015, 00:34 am AAh listo, a seguir practicando entonces.
Muchas gracias. Saludos. |