Проблема с реализацией шаблона наблюдателя: «Базовый тип ссылки на элемент ________ не является структурой или объединением»

Я реализовал шаблон наблюдателя barebones и обнаружил несколько загадочную ошибку: «Базовый тип ссылки на элемент« Наблюдатель * »не является структурой или объединением». Я предполагаю, что это как-то связано с тем, что я использую шаблоны, с которыми мне все еще довольно неудобно. Вот код нарушения (большинство cons / деструкторов удалено для упрощения):

Subject interface:

class Subject { 
public:
    virtual void notify();
private:
    list< Observer * > m_observers; 
};

Subject implementation:

void Subject::notify() {
    list< Observer * >::iterator i;

    for ( i = m_observers.begin(); i != m_observers.end(); i++ ) {
        *i->update( this );                        // ERROR !!! ERROR
}

Абстрактный интерфейс Observer:

class Observer {
public:
    virtual ~Observer();
    virtual void update( Subject * changedSubject ) = 0;

protected:
    Observer();
};

Concrete Observer interface:

class ConcreteObserver: public Observer {

public:
    ConcreteObserver( ConcreteSubject * );
    virtual ~ConcreteObserver();

    virtual void update( Subject * changedSubject );

private:
    ConcreteSubject * m_subject;
};

Конкретная реализация Observer:

void ConcreteObserver::update( Subject * changedSubject ) {
    if ( changedSubject == m_subject ) {
        report();
    }
}

Если бы кто-нибудь мог помочь определить эту проблему, я был бы очень признателен.

Ура, Ник

8
задан user810962 13 July 2011 в 18:04
поделиться