C/Visual C - Ayuda con patron visitor ejemplo sencillo

 
Vista:

Ayuda con patron visitor ejemplo sencillo

Publicado por mscblazer (1 intervención) el 30/08/2008 17:12:42
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){
[b]Visitante.visit(this);[/b] //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();
[b]virtual void visit(TGato*);[/b] //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...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con patron visitor ejemplo sencillo

Publicado por fernando.gomez (1603 intervenciones) el 02/09/2008 06:32:39
Hace falta un ; al final de la declaración de la clase TAcariciar. Fuera de eso, pude compilar tu código sin problemas. De hecho ago el copy-paste de tu código como lo compilé:

#include <iostream>

using namespace std;

class TReaccion;
class TAnimal;
class TGato;

class TReaccion{
public:
virtual void visit(TGato*)=0;
};

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 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;
}

Como verás solo agregué unas líneas al inicio porque lo puse todo en un mismo archivo, además de agregar el susodicho puntoycoma faltante.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar