+ -
当前位置:首页 → 问答吧 → 在线等,求报错原因

在线等,求报错原因

时间:2011-12-24

来源:互联网

#include<iostream>
#include<list>
using namespace std;

class Observer
{
public:
virtual void Update(int value);
};

class ModObserver:public Observer
{
int m_mod;
public:
ModObserver(int mod)
{
m_mod=mod;
}

virtual void Update(int val)
{
cout << val << " mod " << m_mod << " is "<< val % m_mod <<endl;
}
};

class DivObserver:public Observer
{
int m_div;
public:
DivObserver(int div)
{
m_div=div;
}
virtual void Update(int val)
{
cout << val << " div " << m_div << " is "<< val / m_div << endl;
}
};

class Subject
{
public:
virtual void attach(Observer *aobserver);
virtual void detach(Observer *aobserver);
virtual void notify();
protected:
Subject(){};
};

class oneSubject: public Subject
{
list<Observer *> observerlist;
int m_value;
public:
oneSubject( ){};

virtual void attach(Observer *aobserver)
{
observerlist.push_back(aobserver);
}

virtual void detach(Observer *aobserver)
{
observerlist.remove(aobserver);
}

virtual void notify()
{
list<Observer *>::iterator operations;
for(operations = observerlist.begin() ; operations != observerlist.end() ; ++operations)
{
((Observer *)(*operations))->Update(m_value);
}
}

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

int main()
{
ModObserver *mO = new ModObserver(4);
DivObserver *dO = new DivObserver(3);
oneSubject oneS;
oneS.attach(mO);
oneS.attach(dO);
oneS.setValue(14);
}

作者: delilah171   发布时间: 2011-12-24

你的Object、Subject类的实现在哪啊?加上实现就可以了,比如,直接在类里面为几个函数/虚函数提供空实现即可。

作者: heartlesstoanyone   发布时间: 2011-12-24

你把报错信息也贴出来吧

作者: cbzjzsb123   发布时间: 2011-12-24

virtual 函数是要定义的,pure virtual函数才不需要定义
这两个概念你混淆了

作者: qscool1987   发布时间: 2011-12-24