出现了一些莫名其妙的连接错误

jhxtty 2018-11-01 08:56:49
在学设计模式,这是个观察者模式
头文件:
#ifndef Observer_hpp
#define Observer_hpp

#include <stdio.h>
#include <vector>
#include <string>
#include <iostream>
class Observer;
class Subject{
public:
virtual void attach(Observer* o);
virtual void detach(Observer* o);
virtual void notify();
virtual std::string getStatus();
virtual void setStatus(const std::string &s);
virtual ~Subject()=0;
};

class Observer{
public:
virtual void setSubject(Subject *s);
virtual void update();
virtual ~Observer()=0;


};

class ConcreteSubject: public Subject{
std::vector<Observer*> v;
std::string status;
public:
void attach(Observer *o);
void detach(Observer *o);
void notify();
void setStatus(const std::string &s);
std::string getStatus();
};

class ConcreteObserver:public Observer{
std::string name_;
Subject *subject_;
public:
ConcreteObserver(const std::string &s):name_(s){}
void update();
void setSubject(Subject *s);
};
#endif /* Observer_hpp */


cpp文件:
#include "Observer.hpp"
Subject::~Subject(){}
Observer::~Observer(){}

//void ConcreteSubject::attach(Observer *o){
// o->setSubject(this);
// v.push_back(o);
//}
void ConcreteSubject::detach(Observer *o){
auto i=v.begin();
for(;*i!=o&&i!=v.end();i++);
if(i!=v.end()){
v.erase(i);
}
}

void ConcreteSubject::setStatus(const std::string &s){
status=s;
notify();
}
std::string ConcreteSubject::getStatus(){
return status;
}
void ConcreteSubject::notify(){
for(auto &i:v){
i->update();
}
}

void ConcreteObserver::setSubject(Subject *s){
subject_=s;
}



//
//void ConcreteObserver::update(){
// std::cout<<name_<<"收到消息:"<<subject_->getStatus()<<std::endl;
//
//}

被注释的两个函数无法实现,取消注释就会连接错误
...全文
16 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧