私はベアボーンのオブザーバパターンを実装していて、やや秘密のエラーに固執しています: "メンバ参照の基本タイプ '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();
}
}
誰もがこの問題の特定に役立つことができれば、私はそれを大幅に感謝。
乾杯、
あなたは '(* i) - >更新(これ)を試しましたか? ' – Vlad