无法从 .hpp 文件中的类获取返回数据
Posted
技术标签:
【中文标题】无法从 .hpp 文件中的类获取返回数据【英文标题】:unable to get return data from class in .hpp file 【发布时间】:2021-03-10 21:11:12 【问题描述】:我有 2 个文件:main.cpp 和 parser.hpp
我从 parser.hpp 中类的成员函数返回向量
#include <vector>
#include <cstring>
#include <fstream>
#include <iostream>
#include "parser.hpp"
using namespace std;
int main()
ifstream file;
file.open("test.csv");
csv obj;
obj.parse(file);
obj.print_parsed_csv(file);
vector<vector<string>> parsed_csv_data = obj.parse(file);
cout << parsed_csv_data.();
cout << parsed_csv_data.size();
for (int i = 0; i < parsed_csv_data.size(); i++)
for (int j = 0; j < parsed_csv_data[i].size(); j++)
cout << parsed_csv_data[i][j] << '\t';
cout << endl;
这是我的 parser.hpp
using namespace std;
class csv
public:
vector<vector<string>> parse(ifstream &file)
string str;
vector<vector<string>> parsed_data;
while (getline(file, str))
vector<string> parsed_line;
while (!str.empty())
int delimiter_pos = str.find(',');
string word = str.substr(0, delimiter_pos);
// cout << word << " ";
if (delimiter_pos == -1)
parsed_line.push_back(word);
break;
else
str = str.substr(delimiter_pos + 1);
// cout << str << endl;
parsed_line.push_back(word);
parsed_data.push_back(parsed_line);
return parsed_data;
void print_parsed_csv(ifstream &file)
vector<vector<string>> parsed_csv_data = parse(file);
cout << parsed_csv_data.size();
for (int i = 0; i < parsed_csv_data.size(); i++)
for (int j = 0; j < parsed_csv_data[i].size(); j++)
cout << parsed_csv_data[i][j] << '\t';
cout << endl;
;
我只在 parse() 中得到正确的 cout 输出。 parser.hpp 中的 print_parsed_csv() 和 main.cpp 中的 cout 都将 0 作为变量的大小。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:第一次调用obj.parse
时,会读取流对象,直到您到达文件末尾。您需要重新打开文件或重置 file
以在读取文件后指向文件的开头。
您将相同的file
变量传递给以下三个函数中的每一个,但只有第一个有效。第一次调用obj.parse
移动到file
指向输入文件的位置。当obj.parse
第一次退出时,file
指向文件的末尾,因此在随后的 2 次调用中使用它时,没有可读取的内容。
obj.parse(file); // <-- this works fine
obj.print_parsed_csv(file); // <-- this fails
vector<vector<string>> parsed_csv_data = obj.parse(file);fails
// ^^^^^^^^^- this fails
有关如何将ifstream
重置为文件开头的答案,请参阅this question。
【讨论】:
问题出在退货部分。我没有得到任何回报。所以很自然地,我传递给下一个函数的参数没有任何内容。你能帮我找到解决办法吗? @Krushnal Patel 不,问题是没有什么可阅读的,因为您已经“用完”文件流。请参阅编辑后的答案以进行澄清。以上是关于无法从 .hpp 文件中的类获取返回数据的主要内容,如果未能解决你的问题,请参考以下文章
无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]
从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据
无法从 Flutter 中的 Firebase Firestore 返回列表