#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef vector::size_type line_no;
class queryresult;
class textquery{
public:
textquery(ifstream &) { };
queryresult query(string &);
private:
shared_ptr> file;
map < string, shared_ptr>> wm;
};
class queryresult{
friend ostream &print(ostream&, const queryresult&);
public:
queryresult(string s, shared_ptr> p, shared_ptr> p2) :sought(s), lines(p), file(p2) { };
private:
string sought;
shared_ptr> lines;
shared_ptr> file;
};
textquery::textquery(ifstream &in)
{
file.reset(new vector < string > );
string line;
int n = 0;
while (in >> line)
{
file->push_back(line);
istringstream record(line);
string word;
while (record >> word)
{
auto it = wm[word];
if (!it)
it.reset(new set);
it->insert(n);
}
++n;
}
}
queryresult textquery::query(string &word)
{
static shared_ptr> nodata(new set);
auto it = wm.find(word);
if (it == wm.end())
return queryresult(word, nodata, file);
else
return queryresult(word, it->second, file);
}
ostream& print(ostream& os, const queryresult& qr)
{
if (!qr.lines)
{
cout << qr.sought << "is not in the map." << endl;
return os;
}
cout << qr.sought << "occur" << qr.lines->size() << "times";
for (auto &i : *qr.lines)
cout << "line " << i + 1 <<( *qr.file)[i] << endl;
return os;
}
void runqueries(ifstream &infile)
{
textquery tq(infile);
while (true)
{
cout << "enter word to look for, or q to quit";
string s;
if (!(cin >> s) || s == "q") break;
print(cout, tq.query(s)) << endl;
}
}
int main(void)
{
ifstream in("Text.txt");
runqueries(in);
}
请问这个问题是想什么?
这是由于函数实现了两次引起的,双击出错的代码行自动定位到源代码中,删除重复的源代码,边删除边编译检测还有没有重复实现的函数,删除完所有重复定义的函数后再次编译即可避免此类错误。
造成的原因是.cpp或者.h里面有两次函数实现
错误信息给你的挺明显的,你双击两次应都能定义到关键行的
什么怎么破,你想问什么
看你回复了这么多次,就知道这个回复做的不好啊,找到31和73行对症下药啊