He estado implementando un patrón de observador barebones y estoy atascado en un error algo críptico: "Tipo base de referencia de miembro 'Observer *' es no una estructura o unión ". Supongo que esto tiene algo que ver con mi uso de plantillas, con lo cual todavía estoy bastante incómodo. Aquí está el código infractor (la mayoría de los contras/destructores retiradas para simplificar las cosas): interfazProblema Implementando patrón de observador: "Tipo de base de referencia de miembro ________ no es una estructura o unión"
Asunto:
class Subject {
public:
virtual void notify();
private:
list< Observer * > m_observers;
};
Asunto aplicación:
void Subject::notify() {
list< Observer * >::iterator i;
for (i = m_observers.begin(); i != m_observers.end(); i++) {
*i->update(this); // ERROR !!! ERROR
}
Observador interfaz abstracta:
class Observer {
public:
virtual ~Observer();
virtual void update(Subject * changedSubject) = 0;
protected:
Observer();
};
Interfaz del observador de hormigón:
class ConcreteObserver: public Observer {
public:
ConcreteObserver(ConcreteSubject *);
virtual ~ConcreteObserver();
virtual void update(Subject * changedSubject);
private:
ConcreteSubject * m_subject;
};
aplicación Observador Hormigón:
void ConcreteObserver::update(Subject * changedSubject) {
if (changedSubject == m_subject) {
report();
}
}
Si alguien puede ayudar a identificar este problema, que sería de gran aprecio.
Saludos, Nick
intenté '(* i) -> actualizar (esto);'? – Vlad