2011-12-08 11 views
1

プログラムを実行するとこのエラーが発生します。それは正常にコンパイルされますが、私は初期化されていると考えられる初期化されていない変数についていくつか警告を出します。私はエラー "デバッグエラー!ランタイムチェック失敗#3 - 変数 'sumMaleGPA'は初期化せずに使用されています。デバッグエラー!実行時チェック失敗#3

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

using namespace std; 

void 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; 
} 
void sumGrades(ifstream& inFile, float sumFemaleGPA, float sumMaleGPA,int m,int f) 
{ 
sumFemaleGPA=0; 
sumMaleGPA=0; 

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

while(!inFile.eof()) 
{ 

    inFile >> sex >> grade; 

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

avgfGPA=sumFemaleGPA/f; 
avgmGPA=sumMaleGPA/m; 
} 

void 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); 


} 

どこでエラーが発生しているのかわからないため、ファイル全体を投稿しました。

+0

なぜ変数が初期化されていると思いますか? – ChaosPandion

答えて

1

あなたinitializeaverageGPA機能が正しくありません。

あなたが関数内で変更したい任意のパラメータは、passed by reference次のようになります。そのまま

void initialize(int &countFemale,int &countMale,float &sumFemaleGPA,float &sumMaleGPA) 
void averageGPA(float &avgfGPA, float &avgmGPA, int m, int f, float &sumFemaleGPA, float &sumMaleGPA) 

initialize()機能は、実際に変数を初期化しない - あなたはときに最初にデバッグエラーを取得しますので、なぜそれらを使用しようとします。

今、値渡しです。パラメータは関数にコピーされます。関数は、代わりに渡されているもののローカルコピーを変更します。

+0

インラインで初期化する必要はないと思いますか? – ChaosPandion

+0

はい、これもオプションです。私は問題の根本を直接指摘しようとしていました。 – Mysticial

1

あなたの初期化機能ははあなたが渡しているパラメータは、値による渡されているので、それはと思われるものinitliazingされていません。あなたはpassing by-referenceを調べる必要があります。だから、厳密にエラーを話す

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

これらの変数は、何に初期化されていません...これのためです。あなたは1にtehの値を初期化し、値が0からこれを変更しないことに気づくためにあなたの初期化機能を変更、ご理解を高めるために、おそらく

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

ような何かを行うことができ、あなたがのコピーを渡しているためでありますあなたの初期化関数の変数。 &演算子を使用して元の変数への参照を渡したいとします。

関連する問題