【问题标题】:Using and Passing input files to functions使用输入文件并将其传递给函数
【发布时间】:2016-09-02 19:42:07
【问题描述】:

我有一个包含字符(等级)的输入文件,我正在尝试使用函数和输入文件将它们输入到数组中。 我不相信我正在正确声明/传递输入文件(iFile)。对我的语法和参数有任何帮助都会很棒。

错误: 'std::basic_streambuf<_chart _traits>::basic_streambuf(const std::basic_streambuf<_chart _traits>&) [with _CharT = char; _Traits = std::char_traits]' 是私有的

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

void readInput(char gradeArray[][3], ifstream iFile);
void spitOutpt(char gradeArray[][3], ifstream iFile);

int main()
{
    ifstream iFile;
    iFile.open("grades.txt");
    char gradeArray[5][3];

    readInput(gradeArray, iFile);
    spitOutpt(gradeArray, iFile);

    return 0;
}

void readInput(char gradeArray[][3], ifstream iFile)
{
    for(int r = 0; r < 5; r++)
        {
            for(int c = 0; c < 3; c++)
            {
            iFile >> gradeArray[r][c];
            }
        }

    return;
}

void spitOutpt(char gradeArray[][3], ifstream iFile)
{
    cout << "All Grades" << endl;
    cout << left << setw(10) << "Student";
    cout << left << setw(10) << "English";
    cout << left << setw(10) << "History";      
    cout << left << setw(10) << "Math";
    cout << endl;


    for(int r = 0; r < 5; r++)
        {
        cout << "#" << left << setw(10) << r;
            for(int c = 0; c < 3; c++)
            {
            cout << left << setw(10) << gradeArray[r][c];
            }
        cout << endl;
        }

    return;
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    通过引用传递std::ifstreamstd::ofstream

    他们没有复制构造函数。

    void readInput(char gradeArray[][3], ifstream& iFile);
    void spitOutpt(char gradeArray[][3], ifstream& iFile);
    

    清理建议

    您使用ifstream 作为spitOutpt 的参数似乎不正确。也许您的意思是成为ofstream

    void spitOutpt(char gradeArray[][3], ofstream& oFile);
    

    然后将main改为:

    int main()
    {
        ifstream iFile;
        iFile.open("grades.txt");
        char gradeArray[5][3];
    
        readInput(gradeArray, iFile);
    
    
        ofstream oFile;
        oFile.open("grades-out.txt");
        spitOutpt(gradeArray, oFile);
    
        return 0;
    }
    

    【讨论】:

    • 谢谢。这是为什么?从来没有真正理解过“复制构造函数”和“按值/引用传递”的真正含义。
    • @Stubbsy,为什么?
    • @R Sahu,对于非常基本的问题,我们深表歉意。这只是我的第二周。为什么 & 使它工作?我了解它的用途,但不是它的真实定义。再次感谢。
    • 当参数类型为ifstream&amp; 时,输入参数作为引用而不是值传递。按值传递将复制。通过引用传递不会复制。
    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 2021-09-19
    • 2014-09-22
    • 2021-03-21
    • 2014-09-22
    • 2020-03-04
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多