2016-11-01 1 views
2

Вот мой код для задания, которое у меня есть. Всякий раз, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке для своей функции чтения из-за чего-то в «ios_base.h». Я не уверен, что делать и/или если мой код выполняет намеченную функцию взятия файла и перемещает его элементы в отдельный файл с именем и средним рядом друг с другом.Не удается передать filestream в качестве параметра функции?

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <iomanip> 

using namespace std; 

struct Student 
{ 
    string fname; 
    string lname; 
    double average; 
}; 

int read(ifstream, Student s[]); 

void print(ofstream fout, Student s[], int amount); 


int main() 
{ 
    const int size = 10; 
    ifstream fin; 
    ofstream fout; 
    string inputFile; 
    string outputFile; 
    Student s[size]; 

    cout << "Enter input filename: "; 
    cin >> inputFile; 
    cout << "Enter output filename: "; 
    cin >> outputFile; 
    cout << endl; 

    fin.open(inputFile.c_str()); 
    fout.open(outputFile.c_str()); 

    read(fin , s); 
    print(fout, s, read(fin, s)); 

} 

int read(ifstream fin, Student s[]) 
{ 
    string line; 
    string firstName; 
    string lastName; 
    double score; 
    double total; 
    int i=0; 
    int totalStudents=0; 
    Student stu; 

    while(getline(fin, line)){ 
     istringstream sin; 
     sin.str(line); 

     while(sin >> firstName >> lastName){ 
      stu.fname = firstName; 
      stu.lname = lastName; 

      while(sin >> score){ 
      total *= score; 
      i++; 
      } 
      stu.average = (total/i); 
     } 
     s[totalStudents]=stu; 
     totalStudents++; 
    } 
    return totalStudents; 
} 

void print(ofstream fout, Student s[], int amount) 
{ 
    ostringstream sout; 
    for(int i = 0; i<amount; i++) 
    { 
     sout << left << setw(20) << s[i].lname << ", " << s[i].fname; 
     fout << sout << setprecision(2) << fixed << "= " << s[i].average; 
    } 
} 
+0

Пожалуйста, включите фактический код ошибки. – Koga

ответ

3

Объекты Stream не подлежат переходу. Их конструктор копирования удаляется. Они должны быть переданы по ссылке, а не по значению:

int read(ifstream &, Student s[]); 

void print(ofstream &fout, Student s[], int amount); 

и т.д ...

+0

Огромное спасибо, что я собрал его для компиляции. Проблема только в том, что в выходном файле нет ничего, кроме пустой строки? Знал ли я, что правильно заполняет массив, а затем помещает его в выходной поток? –

+0

У вас есть ошибка в коде. Вы дважды вызываете 'read()', который читается до конца файла. Затем код снова вызывает 'read()' и передает возвращаемое значение 'print()'. Как вы думаете, сколько записей будет читать второй вызов 'read()'? –

+0

О, о, я забыл о своей постоянной величине. Мой выходной файл теперь возвращает материал, но вместо имен и среднего класса он просто смехотворный. Вывод, как предполагается, будет по линии «Coop, Jason = 27.31», но это всего лишь смесь случайных чисел и букв. –

Смежные вопросы