こんにちは、私は C++ コースを受講しており、ユーザー定義クラスの使用方法を学んでいますが、my bool に問題があります。この時点までに到達できるのは、コンパイル時にエラーが発生することです
「StudRd::ValidRd() の呼び出しに一致する関数はありません。注: 候補は次のとおりです: bool StudRd::ValidRd(StudRd&) const」
クラスを使用するのはこれが初めてであるだけでなく、bool 関数を使用するのも初めてです。私はこれを経験し、同様の問題を何時間もグーグルで検索しましたが、理解に近づいていないと感じています。
#include "stud.h"
int main()
{
ifstream inFile;
ofstream outFile;
inFile.open("in.data");
outFile.open("out.data");
if(inFile.fail() || outFile.fail())//Checks the in and out files
{
cout << "input file or output file opening failed" << endl;
}
StudRd rd; //Declares an object of the class
rd.DefaultRd(); //Default constructor
outFile << "*~<Student Exam Report>~*" << endl;
outFile << "Stud id" << setw(10) << "Exam 1" << setw(10) << "Exam 2" << setw(10) << "Exam 3" << setw(10) << "Avg" << endl;
rd.ReadRd(inFile, rd);
while(inFile){ //Loop until the file runs out of data
rd.ValidRd(rd); //Determines if data read is valid
if(rd.ValidRd()){ //if statement is executed if bool returns valid
rd.ValidCountRd(rd);
rd.findAvg(rd); //Function that figures out an average for the struct
rd.MaxOfAllExams(rd); //finds the highest valid exam
rd.WriteRd(outFile, rd); //Function that writes the struct to the outFile
}
else{
rd.InvalidCountRd(rd);
rd.WriteInvalidRd(outFile, rd);
}
rd.ReadRd(inFile, rd); //function that reads from the infile and assigns to a structure
}
rd.AvgOfAllExams(rd); //finds the average of all valid exams
rd.WriteFooterRd(outFile, rd); //Writes the footer containing max, avg, pass, fail, valid, invalid
outFile << "*** END ***" << endl;
return 0;
}
クラスと関数の実装は次のとおりです
#include "stud.h"
void StudRd :: DefaultRd()
{
id = -111;
exam1 = -100;
exam2 = -100;
exam3 = -100;
numValid = 0;
numInvalid = 0;
numPass = 0;
numFail = 0;
}
bool StudRd :: ValidRd(StudRd& rd) const
{
return(111 <= rd.id <= 999 &&
0 <= rd.exam1 <= 100 &&
0 <= rd.exam2 <= 100 &&
0 <= rd.exam3 <= 100);
}
void StudRd :: ValidCountRd(StudRd& rd)
{
rd.numValid++;
}
void StudRd :: InvalidCountRd(StudRd& rd)
{
rd.numInvalid++;
}
void StudRd :: MaxOfAllExams(StudRd& rd)
{
if(rd.examMax < rd.exam1){
rd.examMax = rd.exam1;
}
if(rd.examMax < rd.exam2){
rd.examMax = rd.exam2;
}
if(rd.examMax < rd.exam3){
rd.examMax = rd.exam3;
}
}
void StudRd :: AvgOfAllExams(StudRd& rd)
{
rd.avgOfAllExams = rd.examSum / rd.numValid;
}
void StudRd :: ReadRd(ifstream& inFile, StudRd& rd)
{
inFile >> rd.id >> rd.exam1 >> rd.exam2 >> rd.exam3;
}
void StudRd :: WriteRd(ofstream& outFile, StudRd rd)
{
inFile >> rd.id >> rd.exam1 >> rd.exam2 >> rd.exam3;
}
void StudRd :: WriteRd(ofstream& outFile, StudRd rd)
{
outFile.setf(ios::fixed);
outFile.setf(ios::showpoint);
outFile.precision(2);
outFile << rd.id<< setw(10) << rd.exam1 << setw(10) << rd.exam2 << setw(10) << rd.exam3 << setw(10) << rd.avg << setw(10) << rd.passFail << endl;
}
void StudRd :: WriteInvalidRd(ofstream& outFile, StudRd rd)
{
outFile.setf(ios::fixed);
outFile.setf(ios::showpoint);
outFile.precision(2);
outFile << rd.id << setw(10) << rd.exam1 << setw(10) << rd.exam2 << setw(10) << rd.exam3 << setw(10) << "Invalid Data" << endl;
}
void StudRd :: WriteFooterRd(ofstream& outFile, StudRd rd)
{
outFile.setf(ios::fixed);
outFile.setf(ios::showpoint);
outFile.precision(2);
outFile << ">>> Max of All Valid Exams: " << rd.examMax << endl;
outFile << ">>> Average of All Valid Exams: " << rd.avgOfAllExams << endl;
outFile << endl;
outFile << "Number of Valid Data: " << rd.numValid << " Number of Invalid Data: " << rd.numInvalid << endl;
outFile << "Number of Students Passed: " << rd.numPass << " Number of Students Failed: " << rd.numFail << endl;
}
void StudRd :: findAvg(StudRd& rd)
{
rd.avg = float(rd.exam1 + rd.exam2 + rd.exam3)/float(3);
rd.examSum = rd.examSum + rd.avg;
if(rd.avg < 70){
rd.passFail = "F";
numFail++;
}
else{
rd.passFail = "P";
numPass++;
}
}
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
//Creates the structure Studrd
class StudRd
{
public:
void DefaultRd();
bool ValidRd(StudRd& rd) const;
void ValidCountRd(StudRd& rd);
void InvalidCountRd(StudRd& rd);
void MaxOfAllExams(StudRd& rd);
void AvgOfAllExams(StudRd& rd);
void ReadRd(ifstream& inFile, StudRd& rd);
void WriteRd(ofstream& outFile, StudRd rd);
void WriteInvalidRd(ofstream& outFile, StudRd rd);
void WriteFooterRd(ofstream& outFile, StudRd rd);
void findAvg(StudRd& rd);
private:
int id;
int numValid;
int numInvalid;
int numPass;
int numFail;
float exam1;
float exam2;
float exam3;
float avg;
float examMax;
float avgOfAllExams;
float examSum;
string passFail;
};
何がこれを引き起こしているのか、これに関するヘルプがわからないので、少なくともコンパイルして最終的な調整を行うことができます。
誰かがエラーを見つけたら、それを指摘して、何がうまくいかなかったのかを説明してくれると、信じられないほど素晴らしいでしょう。
また、初めて希望を提出したとき、私はこれを正しく行いました。