Excepcion en c++

Tengo esta clase para lanzar las excepciones,la cual funciona si la capturo con catch(...)
class Invalida{
        public:
               Invalida(char * c){
               cad=c;
              }
              char* por_que(){
                  return cad;
              }
        private:
              char* cad;
    };

el problema llega cuando intento capturarla así
try{
      Fecha f(45,10,2012);
   }catch(Invalida i){
      std::cout<<"Excepcion"<<std::endl;
   }

el compliador me dice..expected type-especifier before Invalida
Estoy casi seguro que el error esque Invalida no es accesible desde el archivo donde estas capturando la excepción... Por otro lado, deberías poner un & para capturar el objeto sin copiarlo

De todas formas no me gusta esa forma de capturar excepciones. Yo lo que hago es crear una clase génerica:

struct Excepcion
{
     unsigned int N_Error; // Codigo de error, debes definir los codigos como constantes (por ejemplo: Division_Por_Cero)
     std::string Mensaje;

    Excepcion(std::string mensaje,int N) : Mensaje(mensaje),N_Error(N) {}
};


Con eso puedo crear excepciones de todo tipo (simplemente, pongo un mensaje y le asigno un codigo de error). No obstante, si quiero excepciones más específicas, práctico herencia:
struct Excepcion_Cadena : public Excepcion{ Excepcion_Cadena(std::string mensaje,int n):Excepcion(mensaje,n){}};

La ventaja es que excepcion_cadena también es una excepción, por lo que podría capturarse de las dos formas.
1 respuesta