• Lunes 29 de Abril de 2024, 01:26

Autor Tema:  Problemas con patrón de diseño Visitante...  (Leído 2116 veces)

mscblazer

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Problemas con patrón de diseño Visitante...
« en: Viernes 29 de Agosto de 2008, 20:48 »
0
Saludos a todos los amigos del foro, lo que me trae aqui es un error que me da en un sencillo ejemplo que trato de desarrollar para conocer bien el patrón Visitante(Visitor) a continuación el código:

class TAnimal{  //Clase abstracta del elemento.
  public:
    virtual void Accept(TReaccion&)=0;
};

//Interfaz Clase hija
class TGato : Public TAnimal{  //Clase hija de TAnimal
  public:
    TGato();
    virtual void Accept(TReaccion&);
};

//Implementación Clase hija
TGato::TGato(){} //constructor

void TGato::Accept(TReaccion& Visitante){
  Visitante.visit(this); //Error E2316
}

//Clase abstracta del visitante
class TReaccion{
  public:
    virtual void visit(TGato*)=0;
};


class TAcariciar : public TReaccion{  //Interfaz clase hija del visitante
  public:
    TAcariciar();
    virtual void visit(TGato*); //Error E2293
}


//Implementación clase hija del visitante...
TAcariciar::TAcariciar(){} //constructor

void TAcariciar::visit(TGato *Gatito){
  cout << "Miau" << endl;
}

Y me dan los siguientes errores:
E2293 ) expected
E2316 'visit' is not a member of 'TReaccion'

Agradezco cualquier ayuda.

Gracias de adelantadas...

sonGoku

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Problemas con patrón de diseño Visitante...
« Respuesta #1 en: Martes 2 de Septiembre de 2008, 14:29 »
0
**********  Error E2316

El problema es porque la variable "TReaccion& Visitante"  la tienes que pasar con un puntero para que te tome el enlace dinámico. Te quedaria asi:
void TGato::Accept(TReaccion *Visitante){
Visitante->visit(this); //Error E2316
}


El otro error no se porque teda cuando cambies esto igual te compila ya bien.

Suerte, ya me cuentas

mscblazer

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problemas con patrón de diseño Visitante...
« Respuesta #2 en: Martes 2 de Septiembre de 2008, 17:52 »
0
Ok, muy bien, pero ahora me da un error en la inclusión de las cabeceras, o sea, suponiendo que todas las clases estén en ficheros apartes:

Ej:

#include "Reaccion.h"

  class TAnimal{  //Sea un Animal.h
  public:
    virtual void Accept(TReaccion*)=0;
};

#include "Animal.h"

class TGato : public TAnimal{// Gato.h
  public:
    TGato();
    virtual void Accept(TReaccion*);
};

#include "Gato.h"
TGato::TGato(){} //Sea Gato.cpp

void TGato::Accept(TReaccion* Visitante){
  Visitante->visit(this);
}

Cómo incluirías las cabeceras, porque es el error que me está dando...

Adjunté la imagen del error...

Gracias..
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con patrón de diseño Visitante...
« Respuesta #3 en: Martes 2 de Septiembre de 2008, 21:01 »
0
O bien tienes mal configurado el compilador (tienes que incluirle los directorios donde se encuentrar los ficheros .h o bien poner la ruta completa, rollo #include "C:CompiladorProyectoCabecerasGato.h") o bien no lo has guardado como .h sino .cpp.

mscblazer

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problemas con patrón de diseño Visitante...
« Respuesta #4 en: Martes 2 de Septiembre de 2008, 21:30 »
0
Si, pero si tienes todos los ficheros en la misma carpeta, que yo sepa la dirección completa no es necesaria    :brickwall:

sonGoku

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Problemas con patrón de diseño Visitante...
« Respuesta #5 en: Miércoles 3 de Septiembre de 2008, 08:08 »
0
tienes que utilizar en cada fichero la directiva IFNDEF, por que si lo incluyes por mas de un camino te sale un mensaje de redeclaracion de clases.

ej.
#ifndef _TGATO_
class TGato : Public TAnimal{ //Clase hija de TAnimal
public:
TGato();
virtual void Accept(TReaccion&);
};
#endif

Suerte, ya me cuentas.

mscblazer

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problemas con patrón de diseño Visitante...
« Respuesta #6 en: Miércoles 3 de Septiembre de 2008, 15:06 »
0
Bueno, tienen razón, ya resolví perfectamente.

muchas gracias a todos por su apoyo...  :good: