I'm new to C++. I'm trying to practice compiling a program on Visual Studio but I'm having some trouble deciphering the compiler errors. I could really use some help with figuring out how to properly debug and compile a program so I don't have too much trouble with compiling code in the future.
I have three files: Gradebook.h,, Gradebook.cpp and Source1.cpp. Gradebook.h is in header files, and the other two are in source files in solution explorer.
EDIT: I had a bunch of syntax errors and other unnecessary comments that had been making it difficult for me to read my own code. (thanks ray, and everyone else). below is my revised code. i also found out how to properly use the code sample tool, so now everything should be indented properly.
#include <string>
using namespace std;
class GradeBook
{
public:
//constants
static const int students = 10; //number of tests
static const int tests = 3; //number of tests
//constructor initializes course name and array of grades
string Gradebook(string, const int[][tests]);
void setCourseName(string); //function to set course name
string getCourseName(); //function to retrieve the course name
void displayMessage(); //display a welcome message
void processGrades(); //perform various operations on the grade data
int getMinimum(); //find the minimum grade in the grade book
int getMaximum(); //find the maximum grade in the grade book
double getAverage(const int[], const int); // get student's average
void outputBarChart(); //output bar chart of grade dist
void outputGrades(); //output the contents of the grades array
private:
string courseName; //course name for this gradebook
int grades[students][tests]; //two-dimensional array of grades
}; //end class GradeBook
I don't get any errors in Gradebook.h, but the main problem lies in my other source files:
#include <iostream>
#include <iomanip>
using namespace std;
//include definition of class GradeBook from GradeBook.h
#include "GradeBook.h"
// two-argument constructor initializes courseName and grades array
GradeBook:: GradeBook(string name, const int gradesArray[][GradeBook::tests])
{
setCourseName(name); //initialize coursename
//copy grades from gradeArray to grades
for (int student = 0; student < students; ++student)
for (int tests = 0; tests < tests; ++tests)
grades[student][tests] = gradesArray[student][tests];
} //end two argument GradeBook constructor
//function to set the course name
void GradeBook::setCourseName(string name)
{
courseName = name;
}
GradeBook::Gradebook(string, const int[][tests])
{
}
void GradeBook::setCourseName(string)
{
}
//function to retrieve the course name
string GradeBook::getCourseName()
{
return courseName;
}
//display a welcome message to GradeBook user
void GradeBook::displayMessage()
{
//statements calls getCourseName to get the name of the course the gradebook represents
cout << "Welcome to the grade book for \n" << getCourseName() << "!"
<< endl;
}
//perform various operations on the data
void GradeBook::processGrades()
{
outputGrades(); //output grades array
// call functions getMinimum and getMaximum
cout << "\nLowest grade in the grade book is " << getMinimum()
<< "\nHighest grade in the grade book is " << getMaximum() << endl;
outputBarChart(); //display distribution chart of grades on all tests
}
//find minimum grade in the entire Gradebook
int GradeBook::getMinimum()
{
int lowGrade = 100; //assume lowest grade is 100;
//loop through rows of grades array
for (int student = 0; student < students; ++student)
{
//loop to columns of current row
for (int tests = 0; tests < tests; ++tests)
{
//if current grade less than lowGrade, assign it to lowGrade
if (grades[student][tests] < lowGrade)
lowGrade = grades[student][tests]; //new lowest grade
}
}
return lowGrade;
}
//find maximum grade in the entire gradebook
int GradeBook::getMaximum()
{
int highGrade = 0; //assume highest grade is 0
for (int student = 0; student < students; ++student)
{
//loop to columns of current row
for (int tests = 0; tests < tests; ++tests)
{
//if current grade less than highGrade, assign it to highGrade
if (grades[student][tests] > highGrade)
highGrade = grades[student][tests]; //new highest grade
}
}
return highGrade;
}
//determine average grade for particular set of grades
double GradeBook::getAverage(const int setOfGrades[], const int grades)
{
int total = 0; //initialize total
//sum grades in array
for (int grade = 0; grade < grades; ++grade)
total += setOfGrades[grade];
//return average of grades
return static_cast <double>(total) / grades;
}
//output bar chart displaying grade distribution
void GradeBook::outputBarChart()
{
cout << "\nOverall grade distribution: " << endl;
//stores frequency of grades in each range of 10 grades
const int frequencySize = 11;
int frequency[frequencySize] = {}; //initalize elements to 0;
//for each grade, increment the appropriate frequency
for (int student = 0; student < students; ++student)
for (int tests = 0; tests < tests; ++tests)
++frequency[grades[student][tests] / 10];
//for each grade frequency, print bar in chart
for (int count = 0; count < frequencySize; ++count)
{
//output bar label (0-9, 90-99, 100)
if (count == 0)
cout << "0-9: ";
else if (count == 10)
cout << "100: ";
else
cout << count * 10 << "-" << (count * 10) + 9 << ": ";
//print bar of asterisks
for (int stars = 0; stars < frequency[count]; stars)
cout << '*';
cout << endl;
}
}
//output the contents of the grades array
void GradeBook::outputGrades()
{
cout << "\nThe grades are: \n\n";
cout << " "; //align column heads
//create a column heading for each of the tests
for (int tests = 0; tests < tests; ++tests)
cout << "Test" << tests + 1 << " ";
cout << "Average" << endl; //student average column heading
//create rows/columns of text representing array grades
for (int student = 0; student < students; ++student)
{
cout << "Student " << setw(2) << student + 1;
//output student's grades
for (int tests = 0; tests < tests; ++tests)
cout << setw(8) << grades[student][tests];
//call member function getAverage to calculate student's average
//pass row of grades and the value of tests as the arguments
double average = getAverage(grades[student], tests);
cout << setw(9) << setprecision(2) << fixed << average << endl;
}
}
The main errors that I'm receiving here are the following:
GradeBook:: GradeBook(string name, const int gradesArray[][GradeBook::tests])
ERROR: no instance of overloaded function "GradeBook::GradeBook" matches the specified type.
GradeBook::Gradebook(string, const int[][tests])
{
}
ERROR: Explicit type is missing ('int' assumed) & ERROR: declaration is incompatible with "std::string Gradebook (declared at line 12).
I'm really confused and frustrated. Any insight that you could provide would be extremely helpful. This is an example from my textbook, almost verbatim and I've been trying for the past two hours trying to figure out what's been missing.
The last source file I have is below:
#include "Gradebook.h"
#include "Source1.h"
//function main begins program execution
int main()
{
//two-dimensional array of student grades
int gradesArray[ GradeBook::students][GradeBook::tests] =
{
{87, 96, 70},
{68, 87, 90},
{94, 100, 90},
{100, 81, 82},
{83, 65, 85},
{78, 87, 65},
{85, 75, 83},
{91, 94, 100},
{76, 72, 84},
{87, 93, 73}
}
GradeBook myGradebook("CS101 Introduction to C++ Programming", gradesArray);
myGradeBook.displayMessage();
myGradeBook.processGrades();
} //end main
I'm receiving errors on the last couple of lines: Gradebook myGradebook("xxxx") receives ERROR: expected a ";" .. but don't I already have one?
and myGradebook.displayMessage(); ERROR: identifier "myGradeBook" is undefined.
Please advise and point me in the right direction. I desperately need help.
Gradebook::testsinstead oftests.string Gradebook(....)tostring GradeBook(...)GradeBook(...)with no return type - they're not legal on a constructor.