我想在c ++中创建一个函数来读取一个以文件为参数的文件,但是在编译程序时遇到了问题

I want to create a function in c++ to read a file having the file as an argument, but I have problems when I compile the program

这是读取文件的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void read_function(istream& filename, vector< vector<double> >& v)
{
//vector<vector<double> > v;
    if (filename)
    {
        string linea;
        int i = 0;
        while (getline(filename, linea))
        {
            v.push_back(vector<double>());
            stringstream split(linea);
            double value;
            while (split >> value)
            {
                v.back().push_back(value);
            }          
        }
    }
};

主要功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main(int argc, char const *argv[]){

if (argc < 2)
{  
    cerr <<"input file's name
"
<< endl;
}  

string program_name = argv[0];
ifstream input;
input.open(argv[1]);

vector< vector<double> > array;

for (int i = 0; i < array.size(); i++)
{            
    for (int j = 0; j < array[i].size(); j++)
        cout << read_function(argv[1], array) << '\t';    
        cout << endl;
}

return 0;
}

当我编译代码时,会收到以下错误消息

错误:类型"const char*"的表达式中类型"std::istream&;aka std::basic"的引用初始化无效cout<

错误:传递"void read"函数(std::istream&;,std::vector>&;)的参数1时出错。void read_函数(istream&filename,vectorv)


请不要采用错误的方式,但是对于您的编程技能水平来说,您在代码中所犯的错误看起来可能是一项非常困难的任务。

你犯了几个错误:

百万千克1

你在main中声明input,但在read_function中使用。

百万千克1百万千克1

您在getline中使用的参数不正确

百万千克1百万千克1

read_function的第一个参数是ifstream型,不是char*型。

百万千克1百万千克1

getlineifstream的成员函数。

百万千克1百万千克1

read_function不返回任何内容,因此cout<不正确。

百万千克1

我建议在尝试使用更复杂的东西(如sstreamfstreamvector之前,首先尝试了解如何调用函数、参数及其类型、对象是什么以及如何访问其成员。

我纠正了你的错误,下面的代码只读取你输入文件中的数字,没有字符。我认为这是你的目标,因为你使用了一个double向量。还有一些更优雅的方法可以做到这一点,但我尽量靠近您的代码。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<fstream>
#include<iostream>
#include<vector>
#include<sstream>

using namespace std;

void read_function(char* filename, vector< vector<double> >& v)
{
    int maxNumberOfCharsPerLine=1000;
    ifstream input;
    input.open(filename);
    if(input.is_open())
    {
        char* inputChar;
        string linea;
        while (input.getline(inputChar, maxNumberOfCharsPerLine))
        {
            linea=inputChar;
            v.push_back(vector<double>());
            stringstream split(linea);
            double value;
            while (split >> value)
            {
                v.back().push_back(value);
            }          
        }
    }
    input.close();
}

int main(int argc, char const *argv[]){

    if (argc < 2)
    {  
        cerr <<"no input file's name
"
<< endl;
    }  

    vector< vector<double> > array;
    read_function((char*)argv[1], array);

    for (int i = 0; i < array.size(); i++)
    {            
        for (int j = 0; j < array[i].size(); j++)  
        {
            cout << array[i][j] <<"";
        }
        cout << endl;
    }
    return 0;
}