Tengo este codigo en Dev-C++ pero no corre

yoha1023
07 de Mayo del 2008
ME PUEDEN AYUDAR NO SE QUE ESTA MAL

#include "conio.h"
#include "stdio.h"
#include "iostream" //esta libreria es la unica q va sin .h
#define CAL 5 //Define constante

using namespace std; //esto siemrpe debe ir

int main () // la main 100pre sera int

//class alumno
{
char nombre[50];
float
calificaciones[CAL];

//public:
ingresar(); // Rellenar nuevo objeto // el error que sale es 'ingresar' undeclared (first use this function)
mostrar_nombre(); // Muestra el nombre
reporte(); // Muestra las notas
};
alumno::ingresar() //Ingresa los datos
{
cout <<"Ingrese el Nombre -> ";
cin >> nombre;
int i;
for (i=0;i<CAL;i++)
{
cout << "Por favor ingrese la calificación No " << i; cout <<" ";
cin >> calificaciones[i];
}
}
alumno::mostrar_nombre()
{
cout << nombre; //Escribe el nombre en la pantalla
}
alumno::reporte() //Genera reporte del estudiante
{
int i;
for (i=0;i<CAL;i++)
{
cout << "Nota numero " << i;
cout << ": ";
cout << calificaciones[i];
cout << "n";
}
}

main()
{
int num_est=0; //Numero del objeto en el vector
int numero_objeto=0; //Apuntador del número del objeto
int opcion; //Opción del menú
char nom[50]; //Arreglo de 50 caracteres para el nombre
int i=0; //Auxiliar
int n=0; //Opción en el menú
int dim; //Dimensión del arreglo de objetos
alumno *p; //Crea un puntero a objeto alumno
alumno *aux; //Puntero auxiliar tipo alumno (Solo por ejemplo //pero no es necesario)
cout << "Cuantos alumnos tiene la clase? ";
cin >> dim; //Para cuantos objetos hay que liberar memoria?
cout << "n";
p = new alumno[dim]; //Asigna memoria dinámicamente
if (p==0) //Si p=0 no hay memoria suficiente
{
cout << "Error no hay suficiente memoria";
return 0; //Sale del programa
};
aux=p; //Asignación de un puntero a otro del mismo tipo
do //estructura do...while
{ //que mantiene en el ciclo principal

cout << " n";
cout << "Escoja una opcion. n";
cout << "1-Nuevo estudiante n";
cout << "2-Ver lista de estudiantes inscritos n";
cout << "3-Reporte de un estudiante n";
cout << "Otra tecla para salir n";
cin >> opcion;
switch (opcion)
{
case 1:
(p+numero_objeto) -> ingresar(); //operador flecha en vez de operador
//punto
numero_objeto++;
break;
case 2:
cout <<"n";
cout <<"Lista de Estudiantes inscritos n";
for (i=0;i<numero_objeto;i++)
{
cout << "Estudiante numero " << i;
cout << ": ";
(aux+i) -> mostrar_nombre();
cout << "n";
}
break;
case 3:
cout << "Ingrese el número de lista del estudiante a examinar n";
cin >> n;
cout << "Alumno: ";
(p+n) ->mostrar_nombre();
cout << "n";
(p+n) -> reporte();
break;
default:
return 0; //Sale del programa
}
}
while (opcion !=4); //sale del programa
delete [] p; //libera la memoria asignada a *p
}