Я реализовал шаблон наблюдателя barebones и застрял на несколько загадочной ошибке: «Базовый тип ссылки на элемент« Observer * »не является структурой или объединением».Я предполагаю, что это как-то связано с моим использованием шаблонов, с которым мне все еще довольно неудобно.Вот код ошибки (большинство минусов / деструкторов убрано для упрощения):
Тематический интерфейс:
class Subject {
public:
virtual void notify();
private:
list< Observer * > m_observers;
};
Тематическая реализация:
void Subject::notify() {
list< Observer * >::iterator i;
for ( i = m_observers.begin(); i != m_observers.end(); i++ ) {
*i->update( this ); // ERROR !!! ERROR
}
Абстрактный интерфейс наблюдателя:
class Observer {
public:
virtual ~Observer();
virtual void update( Subject * changedSubject ) = 0;
protected:
Observer();
};
Интерфейс Бетонного наблюдателя:
class ConcreteObserver: public Observer {
public:
ConcreteObserver( ConcreteSubject * );
virtual ~ConcreteObserver();
virtual void update( Subject * changedSubject );
private:
ConcreteSubject * m_subject;
};
Реализация Бетонного наблюдателя:
void ConcreteObserver::update( Subject * changedSubject ) {
if ( changedSubject == m_subject ) {
report();
}
}
Если кто-то может помочь выявить эту проблему, я был бы очень признателен.
Ура, Ник