Our program got cut down from a .h and 2 .cpps to just one .h and one .cpp.... so trying to convert fucntions back to my .h I received tons of errors. Hopefully someone can help me get rid of most of these? please? I need to turn in the final program in like 23 hours. :) Thanks if you can help or if you will. I am not asking anyone to do it... just steer me in the right direction if you see where i am going wrong.... My program is nasty. :cry: :(

Here is the main thing on my lab that I am working on with it too.... for where the structs and arrays come in:
An array of 10 structures of type aClass will make up the storage mechanism; i.e., you will process 10 students.

Heres my .h:

#include<iostream> // all the classes I could ever need for this program
#include<iomanip> // and a few extra just incase.
#include<cmath>
#include<cstdlib>
#include<string>
using namespace std;
 
enum aGrade {a, b, c, d, f, w, i};
 
struct aClass
{
string courses;
aGrade grades;
int hours;
float GP;
};
 
aClass mycourses;
 
void printHead () // this section will display the heading for the output table
{
cout<<"\n\nList of the Courses"<<endl<<"\n Class Hours Grade \n";
cout<<"-----------------------------------"<<endl;
}
 
aGrade convert(enum aGrade in, //OUT: in
aClass mycourses) //IN: grades
 
{ 
switch (mycourses.grades) //switch stmt to get all the letters into the enum catagories 
{
case 'a':case 'A':
in = a;
break;
case 'b':case 'B':
in = b;
break;
case 'c':case 'C':
in = c;
break;
case 'd':case 'D':
in = d;
break;
case 'f':case 'F':
in = f;
break;
case 'w':case 'W':
in = w;
break;
case 'i':case 'I':
in = i;
break;
 
}
 
return in;
}
 
int calcGradePoint(enum aGrade in,
aClass mycourses) //This function is used to calculate the totalgpa for one class 
 
{ 
if(in == a) 
return 4 * mycourses.hours;
if(in == b)
return 3 * mycourses.hours;
if(in == c)
return 2 * mycourses.hours;
if(in == d)
return 1 * mycourses.hours;
if(in == f)
return 0 * mycourses.hours;
if(in == w)
return 0 * mycourses.hours;
if(in == i)
return 0 * mycourses.hours;
 
}
 
 
void sortClass (aClass mycourses) //IN: cnt
//This bubblesort is used to put the courses into alphabetical order
 
{ 
int i = cnt, j = 0, k = 1, temper;
string temp;
char tmp;
 
while (i >= 0 && k)
{
 
k = 0;
for (j = 0; j <= i; j++)
if (mycourses.courses[j] > mycourses.courses[j+1])
{
temp = mycourses.courses[j];
mycourses.courses[j] = mycourses.courses[j+1];
mycourses.courses[j+1] = temp;
 
temper = mycourses.hours[j];
mycourses.hours[j] = mycourses.hours[j+1];
mycourses.hours[j+1] = temper;
 
tmp = mycourses.grades[j];
mycourses.grades[j] = mycourses.grades[j+1];
mycourses.grades[j+1] = tmp;
 
k = 1;
}
i--;
}
}
 
 
 
float calcGPA(const float gpaSum, //IN: gpaSum
const float totalHours ) //IN: totalHours
//This function is used to calculate overall gpa = totalofgpa / totalhours
 
{ 
float gpa;
gpa = float (gpaSum / totalHours);
return gpa;
}
 
 
void printLine (cnt, b, aClass mycourses, gpa, totalHour)
{
for (int b = 1; b <= cnt; b++) //puts the information into the table
{
cout<<setw(12)<<mycourses.courses<<setw(9)<<mycourses.hours<<setw(10)<<mycourses.grades<<endl;
}
 
cout<<"\nThe total GPA is "<<gpa<<" and you attempted "<<totalHours<<" hours."<<endl;
}

and here is my .cpp

#include "schedule.h"
 
 
int main(){ //Calls main function
 
int cnt = 0; //Variables used
char gpaForOneClass;
float gpa = 0.0, totalHours = 0.0, gpaSum = 0.0;
aGrade in;
 
 
while (cnt < 10)
{
while (1)
{
cout<<"\nEnter a course, the letter grade received, and the credit hours. "<<endl;
cin >> mycourses.courses;
 
if (mycourses.courses == "quit" || mycourses.courses == "QUIT" || mycourses.courses == "Quit") break; //ends input when quit or QUIT is typed
 
cin >> mycourses.grades; 
cin >> mycourses.hours;
 
in = convert(in, aClass mycourses); //converts letter input into right value
gpaForOneClass = calcGradePoint(in, aClass mycourses, cnt); //gets gpa total for one class
gpaSum += gpaForOneClass; //totals up gpa
totalHours = totalHours + mycourses.hours; //totals up hours
cnt = cnt + 1;
 
}
 
}
 
gpa = calcGPA(gpaSum, totalHours); //calls gpa function
printHead(); //calls header function to display table
sortClass(aClass mycourses, cnt); // calls bsort function
printLine(cnt, b, aClass mycourses, gpa, totalHours);
 
 
 
cin>>cnt;
 
return 0;
}

and here are the ridiculous amount errors i get:

15 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp In file included from C:/Documents and Settings/Josh/Desktop/Lab5/cs110lab5.cpp 
C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h In function `void sortClass(aClass)': 
87 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h `cnt' undeclared (first use this function) 
87 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h (Each undeclared identifier is reported only once for each function it appears 
100 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h cannot convert `std::string' to `char' in assignment 
 
102 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `int[int]' for array subscript 
103 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `int[int]' for array subscript 
103 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `int[int]' for array subscript 
104 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `int[int]' for array subscript 
106 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `aGrade[int]' for array subscript 
107 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `aGrade[int]' for array subscript 
107 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `aGrade[int]' for array subscript 
108 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h invalid types `aGrade[int]' for array subscript 
 
/Documents and Settings/Josh/Desktop/Lab5/schedule.h C:\Documents and Settings\Josh\Desktop\Lab5\C At global scope: 
129 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h syntax error before `,' token 
C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h In function `void printLine(...)': 
136 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h `gpa' undeclared (first use this function) 
136 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h `totalHours' undeclared (first use this function) 
C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp In function `int main()': 
 
35 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp no match 
for 'operator>>' in 'std::cin >> mycourses.aClass::grades' 
error C:\Dev-Cpp\include\c++\3.3.1\bits\istream.tcc:83 candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, 
92 C:\Dev-Cpp\include\c++\3.3.1\bits\istream.tcc std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, 
101 C:\Dev-Cpp\include\c++\3.3.1\bits\istream.tcc std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, 
That same error.... 19 more times then..
 
74 C:\Dev-Cpp\include\c++\3.3.1\iomanip std::basic_istream<_CharT, _Traits>& 
that same error....4 more times
 
38 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax error before `)' token 
39 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax error before `,' token 
50 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax error before `,' token 
51 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax error before `,' token

Dani AI

Generated

Several separate issues account for the compiler errors seen in this thread. The big ones are: treating an enum like a character (switch labels using 'a' vs an enum), trying to read an enum directly with cin (no built‑in extractor), missing type information in function definitions, calling functions with types instead of variable names, and unsafe indexing in the bubble sort (out‑of‑bounds when using j+1). These points line up with observations from (class vs globals) and (parameter types).

Key, actionable fixes (concise):

  • Keep input and internal representations separate. Read the letter into a char (or string), then convert that to the enum with a small convert(char) function. Example usage:

    char ch;
    cin >> ch;
    mycourses[cnt].grades = convert(ch);
  • Make function signatures complete and coherent. For example:

    aGrade convert(char ch);
    int calcGradePoint(aGrade grade, int hours);
    void sortClass(aClass arr[], int cnt);
    void printLine(int cnt, aClass arr[], float gpa, float totalHours);

    Use calcGradePoint(mycourses[i].grades, mycourses[i].hours) to compute points per course.

  • Fix sorting and swapping: either swap the whole aClass struct (simplest), or use aGrade tmp for the enum field. Ensure loop bounds prevent j+1 from exceeding cnt-1 (e.g., iterate j while j + 1 < cnt or set outer limit to cnt-1). std::swap(arr[j], arr[j+1]) avoids field-by-field errors.

  • Avoid global definitions in a header. Either declare globals extern in the header and define them once in a .cpp, or pass the array and counters as parameters. Also, when printing, convert the enum back to a letter; cout << mycourses[i].grades will print an integer value.

These fixes address the primary compiler messages seen by and will make the code both syntactically correct and safer to maintain.

Recommended Answers

All 4 Replies

Some of the variables being used in the .h file are declared in the .cpp file, which is after you include the info from the .h file.

I reccomend making a schedule class. The code, as it is now, seems unorganzied and making a class would tidy things up a bit. It would also fix most of your problems since they are related to using undeclared variables from the .h file.

Schedule.h can be a class declaration while Schedule.cpp can be the implementation. Have a seperate file (main.cpp?) that contains the main function and implements the class.

I reccomend making a schedule class. The code, as it is now, seems unorganzied and making a class would tidy things up a bit. It would also fix most of your problems since they are related to using undeclared variables from the .h file.

Well, originally I had a schedule class. I thought that was how it was supposed to be turned in (a schedule class, a schedule.cpp, and the main program .cpp) I went to lab today and was informed that "thats harder to do it that way and we are saving classes for lab 6". I had spent about 8 hours working on the program prior to this with defining the class, getting all the function variables lined up, etc. I was told if I did that, points would be taken away because they didnt want to look thru extra code if they didnt have to... Therefore I was trying to edit my program back to just the header file and the main.cpp file.... I agree its unorganized and needs major cleanup work. Thanks for your help. :)

here's my header file... (we are supposed to include our functions here this file... i know its ugly.. but its at the professors/Teaching Assistants discretion.)

#include<iostream>  // all the classes I could ever need for this program
#include<iomanip>   // and a few extra just incase.
#include<cmath>
#include<cstdlib>
#include<string>
using namespace std;

enum aGrade {a, b, c, d, f, w, i};

struct aClass
{
       string courses;
       aGrade grades;
       int hours;
       float GP;
};

int  cnt = 0;                //Variables used
char gpaForOneClass;
float gpa = 0.0, totalHours = 0.0, gpaSum = 0.0;
aGrade in;

aClass mycourses[10];

void printHead ()  // this section will display the heading for the output table
{
     cout<<"\n\nList of the Courses"<<endl<<"\n       Class      Hours     Grade       \n";
     cout<<"-----------------------------------"<<endl;
}

aGrade convert(enum aGrade in, int cnt,     //OUT: in
                  aClass mycourses[])       //IN: grades
                                            
{                                                
  switch (mycourses[cnt].grades)      //switch stmt to get all the letters into the enum catagories                       
    {
      case 'a':case 'A':
        in = a;
        break;
      case 'b':case 'B':
        in = b;
        break;
      case 'c':case 'C':
        in = c;
        break;
      case 'd':case 'D':
        in = d;
        break;
      case 'f':case 'F':
        in = f;
        break;
      case 'w':case 'W':
        in = w;
        break;
      case 'i':case 'I':
        in = i;
        break;
                                                
    }
                                                                                
  return in;
}
                                                                                
int calcGradePoint(enum aGrade in,
               aClass mycourses[])        //This function is used to calculate the totalgpa for one class                                      
                                                
{                                     
 if(in == a)      
   return 4 * mycourses[cnt].hours;
 if(in == b)
   return 3 * mycourses[cnt].hours;
 if(in == c)
   return 2 * mycourses[cnt].hours;
 if(in == d)
   return 1 * mycourses[cnt].hours;
 if(in == f)
    return 0 * mycourses[cnt].hours;
 if(in == w)
    return 0 * mycourses[cnt].hours;
 if(in == i)
    return 0 * mycourses[cnt].hours;
 
}
                                                                                

void sortClass (aClass mycourses[], int cnt)    //IN: cnt
            //This bubblesort is used to put the courses into alphabetical order

{                                 
      int i = cnt, j = 0, k = 1, temper;
      string temp;
      char tmp;
      
      while (i >= 0 && k)
      {
             
            k = 0;
            for (j = 0; j <= i; j++)
                 if (mycourses[j].courses > mycourses[j+1].courses)
                 {
                       temp = mycourses[j].courses;
                       mycourses[j].courses = mycourses[j+1].courses;
                       mycourses[j+1].courses = temp;
                       
                       temper = mycourses[j].hours;
                       mycourses[j].hours = mycourses[j+1].hours;
                       mycourses[j+1].hours = temper;
                       
                       tmp = mycourses[j].grades;
                       mycourses[j].grades = mycourses[j+1].grades;
                       mycourses[j+1].grades = tmp;
                 
                       k = 1;
                  }
            i--;
            }
}


    
float calcGPA(const float gpaSum,    //IN: gpaSum
             const float  totalHours )  //IN:  totalHours
                //This function is used to calculate overall gpa = totalofgpa / totalhours

{                                         
      float gpa;
      gpa = float (gpaSum / totalHours);
      return gpa;
}


void printLine (cnt, b, aClass mycourses[], gpa, totalHour)
{
      for (int b = 1; b <= cnt; b++)  //puts the information into the table
      {
          cout<<setw(12)<<mycourses[b].courses<<setw(9)<<mycourses[b].hours<<setw(10)<<mycourses[b].grades<<endl;
      }
    
      cout<<"\nThe total GPA is "<<gpa<<" and you attempted "<<totalHours<<" hours."<<endl;
}

and here is my main program... .cpp

#include "schedule.h"


int main(){      //Calls main function
    
   
        
    while (cnt < 10)
    {
          while (1)
              {
                   cout<<"\nEnter a course, the letter grade received, and the credit hours. "<<endl;
                   cin >> mycourses[cnt].courses;
      
                   if (mycourses[cnt].courses == "quit" || mycourses[cnt].courses == "QUIT" || mycourses[cnt].courses == "Quit")  break;  //ends input when quit or QUIT is typed
          
                   cin >> mycourses[cnt].grades;            
                   cin >> mycourses[cnt].hours;
         
                   in = convert(in, cnt, aClass mycourses[]);                    //converts letter input into right value
                   gpaForOneClass = calcGradePoint(in, aClass mycourses[], cnt);  //gets gpa total for one class
                   gpaSum += gpaForOneClass;                //totals up gpa
                   totalHours = totalHours + mycourses[cnt].hours;        //totals up hours
                   cnt = cnt + 1;
       
             }
             
    }
            
    gpa = calcGPA(gpaSum, totalHours);  //calls gpa function
    printHead();                           //calls header function to display table
    sortClass(aClass mycourses[], cnt);   // calls bsort function
    printLine(cnt, b, aClass mycourses[], gpa, totalHours);
    
     
   
    cin>>cnt;
    
    return 0;
}

and here are the errors i am receiving in full...

15 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp In file included from C:/Documents and Settings/Josh/Desktop/Lab5/cs110lab5.cpp 
 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h In function `void  sortClass(aClass*, int)': 
113 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h cannot  convert `char' to `aGrade' in assignment 
/Documents and Settings/Josh/Desktop/Lab5/schedule.h C:\Documents and Settings\Josh\Desktop\Lab5\C At global scope: 
134 C:\Documents and Settings\Josh\Desktop\Lab5\schedule.h syntax error  before `[' token 
 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp In function `int  main()': 

31 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp no match  for 'operator>>' in 'std::cin >> mycourses[cnt].aClass::grades' 
 error C:\Dev-Cpp\include\c++\3.3.1\bits\istream.tcc:83 candidates are:  std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,  
92 C:\Dev-Cpp\include\c++\3.3.1\bits\istream.tcc                  std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,  
16 more of these errors.

644 C:\Dev-Cpp\include\c++\3.3.1\istream                  std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char,  
3 more of these errors.

74 C:\Dev-Cpp\include\c++\3.3.1\iomanip                  std::basic_istream<_CharT, _Traits>&  
4 more of these errors.

34 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax  error before `[' token 
35 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax  error before `[' token 
46 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax  error before `[' token 
47 C:\Documents and Settings\Josh\Desktop\Lab5\cs110lab5.cpp syntax  error before `[' token

There is a problem with the enum file aGrade im sure but I'm not exactly sure how to fix it...

And i dont know how to fix the" syntax error before `[' token " errors.
Any advice? Thanks.

Sorry, I've just taken a cursory look.

There is a problem with the enum file aGrade im sure but I'm not exactly sure how to fix it...

Should tmp be an aGrade, should mycourses[j+1].grades be a char, or do you need to convert from a char to an aGrade?

And i dont know how to fix the" syntax error before `Provide type information for all parameters in the function definition.

void printLine (/*???*/cnt, /*???*/b, aClass mycourses[], /*???*/gpa, /*???*/totalHour)

(we are supposed to include our functions here this file... i know its ugly.. but its at the professors/Teaching Assistants discretion.)

My condolences. I wonder what other bad programming practices you will be taught.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.