ошибка C2248: 'std :: basic_ios <_Elem, _Traits> :: basic_ios': невозможно получить доступ к закрытому члену, объявленному в классе - PullRequest
1 голос
/ 08 декабря 2011

Я не могу определить ошибку здесь, другие статьи немного неясны относительно ответов на ошибку, так что здесь моя. Я получаю эту ошибку, я думаю, что это как-то связано с файлами, которые он пытается открыть. Я опубликовал весь файл .cpp, так как не уверен, откуда возникла ошибка.

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

using namespace std;

int openFiles(ifstream inFile, ofstream outFile)
{
inFile.open("finalin.dat");
outFile.open("finalout.dat");
outFile << fixed << showpoint << setprecision(2);
inFile >> fixed >> showpoint >> setprecision(2);
if (!inFile||!outFile)
{
    cout << "Problem opening file.";
}
}
void initialize(int countFemale,int countMale,float sumFemaleGPA,float sumMaleGPA)
{
countFemale=0;
countMale=0;
sumFemaleGPA=0;
sumMaleGPA=0;
}
int sumGrades(ifstream inFile, float sumFemaleGPA, float sumMaleGPA,int m,int f)
{

    if (!inFile)
    {
        inFile.open("finalin.dat");
    }
char sex;
float grade;    

while(!inFile.eof())
{

    inFile >> sex >> grade;

    switch (sex)
    {
    case 'f': (sumFemaleGPA + grade);
         f++;
        break;
    case 'm': (sumMaleGPA + grade);
            m++; 
         break;
    }
}
}
int averageGPA(float avgfGPA, float avgmGPA, int m, int f, float sumFemaleGPA,   float sumMaleGPA)
{
avgfGPA=sumFemaleGPA/f;
avgmGPA=sumMaleGPA/m;
}

int printResults(float avgfGPA, float avgmGPA, ofstream outFile)
{
        cout <<"The average GPA of the female students is: "<<  avgfGPA << endl;
        cout <<"The average GPA of the male students is: "<< avgmGPA;

        outFile << "The average GPA of the female students is: "<<  avgfGPA << endl;
        outFile <<"The average GPA of the male students is: "<< avgmGPA;

}

        int main()
{

int countFemale;
int countMale;
float sumFemaleGPA;
float sumMaleGPA;
float avgfGPA; 
float avgmGPA;

ifstream inFile;
ofstream outFile;

openFiles(inFile,outFile);
initialize(countFemale,countMale,sumFemaleGPA,sumMaleGPA);
sumGrades(inFile,sumFemaleGPA,sumMaleGPA,countMale,countFemale);
averageGPA(avgfGPA,avgmGPA,countMale,countFemale,sumFemaleGPA,sumMaleGPA);
printResults(avgfGPA,avgmGPA, outFile);


}

Кроме того, я понимаю, что пять таких функций немного беспорядочные, но именно так просил наш профессор, поскольку мы также должны продемонстрировать свои знания о функциях.

1 Ответ

6 голосов
/ 08 декабря 2011

Проблема в том, что вы не можете передавать потоки по значению, вы должны передавать их по ссылке или по указателю. в каждом определении аргументов функции добавьте & после таких потоков, как:

int printResults(float avgfGPA, float avgmGPA, ofstream& outFile)

вместо

int printResults(float avgfGPA, float avgmGPA, ofstream outFile)

Edit:
Ваша инициализация ничего не делает, потому что она принимает аргументы по значению. вам нужно взять их по ссылке, чтобы иметь возможность изменять источник, используйте

void initialize(int &countFemale,int &countMale,float &sumFemaleGPA,float &sumMaleGPA)

вместо

void initialize(int countFemale,int countMale,float sumFemaleGPA,float sumMaleGPA)

и предупреждение должно исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...