xiekewang 2017-01-12 05:50 采纳率: 0%
浏览 1104

c++中this 为0x1c,自定义的类Vector<string>读取文件内容时报错

主程序如下,当从cin中读入任何数据都没有问题
int main()
{
StrVec sv{ "i","dont","understand" };
for (auto p = sv.begin(); p != sv.end(); p++)
cout << p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
string s;
while (getline(cin, s)) {
sv.push_back(s);
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
}
这是试运行效果。
图片说明
但是读取文件中的内容时就出问题:
图片说明
int main()
{
/*StrVec sv{ "i","dont","understand" };
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
string s;
while (getline(cin, s)) {
sv.push_back(s);
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
}
/
ifstream in("test.txt");
if (!in) {
cout << "无法打开输入文件" << endl;
EXIT_FAILURE;
}
runQueries(in);
system("pause");
return 0;
}

查看调用堆栈,感觉问题应该是在这里
TextQuery::TextQuery(ifstream &in):vs()
{
string line, word;
while (getline(in, line))
vs.push_back(line);****查看堆栈返回到这里***
for (size_t i = 0; i != vs.size(); i++) {
stringstream sm(*(vs.begin()+i));
while (sm >> word)
m[word].push_back(i + 1);//绑定每个单词和它出现的行号。
}
}
这个问题是C++Primer 5th里第十三章的13.42里的题。
(在你的TextQuery和QueryResult类中用StrvVec类代替vector)

经过反复的测验,我认为可以确定StrVec类是没有问题,但是不明白我定义的push_back读取cin时没有问题,读取文件时就出现问题。

  • 写回答

1条回答

  • devmiao 2017-01-13 16:32
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统