簡體   English   中英

通過函數傳遞ifstream文件時出錯

[英]Errors when passing ifstream file through a function

這是我的代碼:

#include <string>
#include <iomanip>
#include <fstream>
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

// include .h file that holds function ot write header
#include "WriteE3RptHdr.h"

// declare global constant
const int NUM_QTS = 15;

// declare struct to hold info on student and answers
struct StudRpt {
    char answers[NUM_QTS];
    string firstName;
    string lastName;
    char answerKey[NUM_QTS];
    string testKey;
    string testData;
};

StudRpt Data;

// function prototypes
StudRpt StoreAnswerKey(StudRpt Data, ifstream inFile);
StudRpt StoreStudData(StudRpt Data, ifstream inFile);
void WriteRpt(StudRpt Data, ofstream& outFile);

int main()
{
    int correct;
    int inforrect;
    int score;
    // delcare and open file streams
    ifstream inFile;
    ofstream outFile;
    inFile.open("in.data");
    outFile.open("out.data");

    // call function included from .h file
    WriteRptHdr(outFile);

    StoreAnswerKey(Data, inFile);

    // priming read
    StoreStudData(Data, inFile);

    while (inFile) {
        StoreStudData(Data, inFile);
        WriteRpt(Data, outFile);
    }
    inFile.close();
    outFile.close();
}
//----------------------------------------------------
StudRpt StoreAnswerKey(StudRpt Data, ifstream inFile) {
    int i;
    for (i = 0; i < NUM_QTS; i++) {
        inFile >> Data.answers[i];
    }

    return Data;
}

.h文件中包含函數WriteRptHdr。 它通過函數傳遞了一個流-我已經對其進行了測試,並且效果很好。 但是ifstream inFile不起作用(該程序用於讀取答案鍵,並將其與學生給出的答案進行比較。我無法從傳遞的ifstream中將其讀取到答案鍵中)

我正在使用Pico。 這是我得到的錯誤:

In function 'int main()':
Tester.cxx:48: note: synthesized method 'std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)' first required here
Tester.cxx:48: error: initializing argument 2 of 'StudRpt StoreAnswerKey(StudRpt, std::ifstream)'

您無法按值傳遞流,因為流不可復制。

相反,傳遞對流的引用(以及您的StudRpt ):

StudRpt StoreAnswerKey(StudRpt& Data, ifstream& inFile);
StudRpt StoreStudData(StudRpt& Data, ifstream& inFile);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM