0

全て、

以下は、ヘッダー ファイルと .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");
}

「モデル」変数のこの「宣言されていない識別子」の問題を解決するのを手伝ってくれませんか?

4

0 に答える 0