Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con patrón de diseño Visitante...

Estas en el tema de Problemas con patrón de diseño Visitante... en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/08/2008, 17:00
 
Fecha de Ingreso: junio-2008
Mensajes: 7
Antigüedad: 15 años, 10 meses
Puntos: 0
Problemas con patrón de diseño Visitante...

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...
  #2 (permalink)  
Antiguo 30/08/2008, 21:35
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problemas con patrón de diseño Visitante...

Creo que se debe a que las clases no están bien ordenadas
Primero debes declarar la clase visitante porque la estás llamando en la clase TGato
Código:
//Clase abstracta del visitante
class TReaccion{
public:
virtual void visit(class TGato*)=0; // en este caso TGato es un apuntador no se necesita conocer como está estructurada la clase para crear un apuntador, solo se debe indicar que es un apuntador a una clase.
};

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&); // Aquí se usa la clase TReaccion y se debe conocer como está declarada, por eso la clase TReaccion debe estar declarada antes que la clase TGato.
};
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:22.