The following code is an implementation of Observer design pattern

Code:
#include<iostream>
#include<vector>
using namespace std;

class Subject{

	vector<class Observer*> views;
	int value;

public:
    
    void attach(Observer *obs)
	{
     views.push_back(obs);
	}

	void setValue(int val)
	{
	
         value=val;
		 notify();
	}

	int getValue()
	{

      return value;
	}
	void notify();
};
void Subject::notify()
{
    for(int i=0;i<views.size();i++)
	{
	      views[i]->update();
	
	}

}


class Observer{

Subject *model;
int denom;

public:
	Observer(Subject *sub,int d):model(sub),denom(d)
	{
		
	 model->attach(this);
	
	}
    
	virtual void update()=0;
protected:

	Subject *getSubject()
	{
	
	      return model;
	}

    int getDivisor()
	{
      return denom;
	}

};

class DivObserver: public Observer{
public:

	DivObserver(Subject *sub,int d):Observer(sub,d)
	{

	}
	void update()
	{
       int v=getSubject()->getValue(),d=getDivisor();
	   cout << v << " div " << d << " is " << v / d << '\n';
	}




};


class ModObserver: public Observer{
public:

	ModObserver(Subject *sub,int d):Observer(sub,d)
	{

	}
	void update()
	{
       int v=getSubject()->getValue(),d=getDivisor();
	   cout << v << " mod " << d << " is " << v % d << '\n';
	}




};
	
int main()
{

Subject sub;

DivObserver d1(&sub,4);
DivObserver d2(&sub,3);
ModObserver m1(&sub,4);


sub.setValue(14);

cin.get();
return 0;

}
But Im getting the following error

error C2027: use of undefined type 'Observer'