Hello to all, i have coded an observer pattern

Code:
class IObserver;

class ISubject
{
public:

public:
 ISubject();
 virtual ~ISubject();

 virtual void RegisterObserver(IObserver*) = 0;
 // Observer only interest in certain aspect
 virtual void RegisterObserver(IObserver*, bool) = 0;

 virtual void UnRegisterObserver(const IObserver*) = 0;
 
 // An Observer with 1 subject 
 virtual void NotifyObserver() = 0;
 // An Observer with many subject
 virtual void NotifyObserver(const ISubject&) = 0;

};

class IObserver
{

public:
 IObserver();
 virtual ~IObserver();


 virtual void Update(ISubject*) = 0; 
 // Observer only interest in certain aspect
 //virtual void Update();


};


class Subject : public ISubject
{
public:

 Subject();
 Subject(size_t);
 ~Subject();

 void RegisterObserver(IObserver*);
 void RegisterObserver(IObserver*, bool);

 void UnRegisterObserver(const IObserver*);
 

 void NotifyObserver();
 void NotifyObserver(const ISubject&);


 void setValue(const size_t&);
 size_t getValue() const;

private:

 size_t value;
 std::vector<IObserver*> cont;

};

Observer::Observer() 
{
}
// =============================================
Observer::~Observer()
{
}
// =============================================
void Observer::Update(ISubject* observSubject)
{
// Error Here
 cout << observSubject->getValue();
}
error C2027: use of undefined type 'ISubject'
error C2227: left of '->getValue' must point to class/struct/union/generic type

Please help.

Thanks.