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++:
typedef struct {int padron; string nombre;}datos;
struct datos{int padron; string nombre;};
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++:
Citarmain.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.
AAh listo, a seguir practicando entonces.
Muchas gracias.
Saludos.