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 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路