16,213
社区成员
发帖
与我相关
我的任务
分享
//NameSource.h
#ifndef NAMESOURCE_H
#define NAMESOURCE_H
#include<vector>
#include<string>
/*单件的设计模式
**操作文件,来读取和写入相关数据,
存储在title和message两个vector<string>中*/
class NameSource{
private:
static NameSource name;
std::vector<std::string> title;
std::vector<std::string> message;
char* fileName;
public:
static NameSource& instance(){return name;} //返回单件引用
NameSource(){
fileName="Source.txt";
}
~NameSource(){}
void readFile();
void writeFile();
std::string& getTitle(int i){return title[i];}
std::string& getMessage(int i){return message[i];}
};
#endif // NAMESOURCE_H
//NameSource.cpp
#include<fstream>
#include<vector>
#include<string>
#include"NameSource.h"
NameSource NameSource::name; //实例化单件
void NameSource::readFile(){
std::ifstream is(fileName);
for(size_t i=0;i<10;++i){
std::string temp;
std::getline(is,temp);
std::string first=temp.substr(0,temp.find(' '));
std::string second=temp.substr(temp.find(' ')+1,temp.size()-1);
title.push_back(first);
message.push_back(second);
}
}
void NameSource::writeFile(){
std::ofstream os(fileName);
for(size_t i=0;i<10;++i){
os<<title[i]<<' '
<<message[i]<<'\n';
}
}
//mainwindow.h省略
//mainwindow.cpp
#include<string>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"message.h"
#include"NameSource.h"
#include"login.h"
#include"findpath.h"
//... 若干代码
void MainWindow::SetMessage(int index){ //经过调试index 没有问题
NameSource::instance().readFile(); //从文件中读取数据
//std::string testtitle=NameSource::instance().getTitle(index);
//std::string testmessage=NameSource::instance().getMessage(index);
//经过调试,当index在合理范围内,得到以上注释string的值均为空
ShowTitle=QString::fromStdString(NameSource::instance().getTitle(index));
ShowMessage=QString::fromStdString(NameSource::instance().getMessage(index));
message=new Message(this,ShowTitle,ShowMessage);
message->show();
}
#include<iostream>
#include<vector>
#include"NameSource.h"
using namespace std;
int main(){
NameSource::instance().readFile(); //读取文件得到数据
for(int i=0;i<10;++i){
cout<<NameSource::instance().getTitle(i)<<' ';
cout<<NameSource::instance().getMessage(i)<<endl;
}
}