无法从 .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 中类的成员函数返回向量。但是,我的 main.cpp 似乎没有从返回值中得到任何东西,因为当我打印它的大小时,我得到 0。 这是我的 main.cpp:

#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 事件返回位置数据

无法获取从 dataTask() 返回的数据

无法从 Flutter 中的 Firebase Firestore 返回列表

无法从 Fortran 90 中返回的 C 浮点指针获取数据

无法从 api 获取数据,Future 总是返回 null - 颤振