I have two classes Observer and Subject and ObserverA, ObserverB which are extending Observer (for implementing Observer DP).
In Subject I have a vector of pointers to Observer class:
class Subject {
std::vector<Observer*> obs;
int state;
public:
Subject(): state(0) {}
void notifyAll() {
for(std::vector<Observer*>::iterator it = obs.begin(); it != obs.end(); it++)
{
(*it)->update();
}
}
}
...
};
In Observer, I also have a Subject:
class Observer {
protected:
Subject subj;
public:
virtual void update() {};
};
ObserverA, ObserverB alike:
class ObserverA: public Observer {
public:
ObserverA(Subject s) {
subj = s;
s.attach(this);
}
virtual void update() {
std::cout << "Update A, state subj: " << subj.getState() << std::endl;
}
};
Before declaring class Subject, I added forward declaration for class Observer. However I am getting compiling errors:
Observer.h: In member function ‘void Subject::notifyAll()’:
Observer.h:27:17: error: invalid use of incomplete type ‘class Observer’
(*it)->update();
^
Observer.h:7:7: error: forward declaration of ‘class Observer’
class Observer;
^
I have a vector of pointers to Observer, in Subject class, I forward declared Obsever class and Observer class knows about Subect, why do I still have the error?