Программа, использующая fstream, не будет компилироваться

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
class InsurancePolicy
{
    friend fstream&  operator<<(fstream&, InsurancePolicy);
    friend istream& operator>>(istream&, InsurancePolicy&);
private:
    int policyNum;
    string lastName;
    int value;
    int premium;
};
fstream& operator<<(fstream& out, InsurancePolicy pol)
{
    out << pol.policyNum << " " << pol.lastName << " " << pol.value << " " << pol.premium << endl;
    return out;
}
istream& operator>>(istream& in, InsurancePolicy& pol)
{
    in >> pol.policyNum >> pol.lastName >> pol.value >> pol.premium;
    return in;
}
int main()
{
    ofstream outfile;
    outFile.open("Policy.txt");
    Policy aPolicy[10];
    for (int count = 0; count < 10; ++count)
    {
        printf("Enter the policy number, the holder's last name, the value, and the premium.");
        cin >> aPolicy[count];
        outfile << aPolicy[count] << endl;
    }

} Эта программа должна принимать значения с клавиатуры и печатать их в файл. Однако это дает кучу синтаксических ошибок.

Код серьезности Описание Ошибка состояния подавления строки файла проекта C2065 'outFile': необъявленный идентификатор Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 39

Ошибка C2228 слева от '.open' должна иметь класс / структуру / объединение Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 39

Ошибка C2065 «Политика»: необъявленный идентификатор Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 40

Ошибка синтаксиса C2146: отсутствует ';' перед идентификатором 'aPolicy' Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 40

Ошибка C2065 'aPolicy': необъявленный идентификатор Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 40

Ошибка C2065 'aPolicy': необъявленный идентификатор Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 44

Ошибка C2065 'aPolicy': необъявленный идентификатор Project6 c: \ users \ preston freeman \ source \ repos \ jave.cpp 45

Как мне исправить эти ошибки? Спасибо за уделенное время?


c++
person Preston Freeman    schedule 21.04.2018    source источник
comment
Популярная викторина: найдите разницу: outfile и outFile; также Policy и InsurancePolicy.   -  person Sam Varshavchik    schedule 21.04.2018
comment
Когда вы получаете подобные ошибки, первое, что нужно сделать, это прочитать сообщения об ошибках. №1: Начните сверху, прочтите первый, внесите исправления (для этого вам нужно действительно прочитать свой код), а затем повторите попытку. №2. Если вы получаете ошибки, вернитесь к №1. Продолжайте делать это, пока не перестанете получать ошибки.   -  person Ken White    schedule 21.04.2018
comment
friend fstream& operator<<(fstream&, InsurancePolicy); - Это должно быть: friend fstream& operator<<(fstream&, const InsurancePolicy&);. Вы не должны передавать объекты по значению в функцию потоковой передачи вывода.   -  person PaulMcKenzie    schedule 21.04.2018


Ответы (1)


В коде много опечаток, но основная проблема заключается в отсутствии известного преобразования из fstream в ofstream, поэтому вот правильная версия кода:

#include <iostream>
#include <fstream>
using namespace std;
class InsurancePolicy
{
    friend ofstream&  operator<<(ofstream&, InsurancePolicy);
    friend istream& operator>>(istream&, InsurancePolicy&);
private:
    int policyNum;
    string lastName;
    int value;
    int premium;
};
ofstream& operator<<(ofstream& out, InsurancePolicy pol)
{
    out << pol.policyNum << " " << pol.lastName << " " << pol.value << " " << pol.premium << endl;
    return out;
}
istream& operator>>(istream& in, InsurancePolicy& pol)
{
    in >> pol.policyNum >> pol.lastName >> pol.value >> pol.premium;
    return in;
}
int main() {
    ofstream outFile;
    outFile.open("Policy.txt");
    InsurancePolicy aPolicy[10];
    for (int count = 0; count < 10; ++count)
    {
        printf("Enter the policy number, the holder's last name, the value, and the premium.");
        cin >> aPolicy[count];
        outFile << aPolicy[count]<<std::endl;
    }
    return 0;

}
person PapaDiHatti    schedule 21.04.2018