Bir barebones gözlemcisi modeli uyguluyordum ve biraz şifreli bir hataya takılıyorum: "Üye referans tabanı türü 'Gözlemci *' dir bir yapı veya birlik değil. Bunun hala oldukça rahatsız olduğum şablonlar kullanmamla ilgili bir şey olduğunu varsayalım.Sorun Uygulayan Gözlemci Deseni: "Üye başvuru tabanı türü ________ bir yapı veya birleşim değil"
Konu arayüzü:
class Subject {
public:
virtual void notify();
private:
list< Observer * > m_observers;
};
Konu uygulanması:
void Subject::notify() {
list< Observer * >::iterator i;
for (i = m_observers.begin(); i != m_observers.end(); i++) {
*i->update(this); // ERROR !!! ERROR
}
Gözlemci soyut arayüzü:
class Observer {
public:
virtual ~Observer();
virtual void update(Subject * changedSubject) = 0;
protected:
Observer();
};
İşte kusurlu kodu (şeyler basitleştirmek için kaldırıldı çoğu eksileri/yok ediciler) 'dir
Beton Gözlemcisi arayüzü:
class ConcreteObserver: public Observer {
public:
ConcreteObserver(ConcreteSubject *);
virtual ~ConcreteObserver();
virtual void update(Subject * changedSubject);
private:
ConcreteSubject * m_subject;
};
Beton Gözlemci uygulaması: herkes bu sorunu tanımlamaya yardımcı olsaydı
void ConcreteObserver::update(Subject * changedSubject) {
if (changedSubject == m_subject) {
report();
}
}
, ben çok iyi olur.
Alkış,
'ı (* i) -> güncelleştirmeyi denediniz mi (bu);'? – Vlad