全て、
以下は、ヘッダー ファイルと .cpp ファイルです。Visual Studio 2012 でプロジェクトをビルドすると、このエラーが発生します。
「エラー C2065: 'モデル': 宣言されていない識別子」
これが私のヘッダーファイルです:
// ObserverPattern.h
//
#include <iostream>
#include <vector>
using namespace std;
#ifndef _OBSERVER_PATTERN_
#define _OBSERVER_PATTERN_
class Subject {
private:
vector < class Observer * > views;
int value;
public:
__declspec(dllexport) void attach(Observer *obs);
__declspec(dllexport) void setVal(int val);
__declspec(dllexport) int getVal();
__declspec(dllexport) void notify();
};
class Observer {
public:
Subject *model;
int denom;
protected:
__declspec(dllexport) Subject *getSubject();
__declspec(dllexport) int getDivisor();
public:
__declspec(dllexport) Observer(Subject *mod, int div);
__declspec(dllexport) virtual void update();
};
#endif
また、ここに私の .cpp ファイルがあります:
// ObserverPattern.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <vector>
#include "ObserverPattern.h"
using namespace std;
void Subject::attach(Observer *obs) {
views.push_back(obs);
}
void Subject::setVal(int val) {
value = val;
notify();
}
int Subject::getVal() {
return value;
}
Observer::Observer(Subject *mod, int div) {
model = mod;
denom = div;
model->attach(this);
}
Subject Observer::*getSubject() {
return model;
}
int Observer::getDivisor() {
return denom;
}
void Subject::notify() {
for (int i = 0; i < views.size(); i++)
views[i]->update();
}
class DivObserver: public Observer {
public:
DivObserver(Subject *mod, int div): Observer(mod, div){}
void update() {
int v = getSubject()->getVal(), d = getDivisor();
cout << v << " div " << d << " is " << v / d << '\n';
}
};
class ModObserver: public Observer {
public:
ModObserver(Subject *mod, int div): Observer(mod, div){}
void update() {
int v = getSubject()->getVal(), d = getDivisor();
cout << v << " mod " << d << " is " << v % d << '\n';
}
};
int main() {
Subject subj;
DivObserver divObs1(&subj, 4);
DivObserver divObs2(&subj, 3);
ModObserver modObs3(&subj, 3);
subj.setVal(14);
system ("pause");
}
「モデル」変数のこの「宣言されていない識別子」の問題を解決するのを手伝ってくれませんか?