I kind of re-arranged things here.. I put all the classes in a header file by themselves, replaced inline functions.. I commented out or removed any functions that caused a linker error. Everything here compiles. Take a look and compare to what ye' got and slowly work up to what you want from code that compiles.
student.h
Code:
/* Skapar elever, tilldelar dem kön samt betyg */
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
using std::cin;
using std::cout;
class student
{
public:
//student();
//~student();
void setGender(); // FALSE=boy, TRUE=girl
void giveGrade();
float getGrade();//{return grade;}
bool getGender();//{return gender;}
private:
bool gender;
double grade;
};
#endif // STUDENT_H
student.cpp
Code:
#include "student.h"
using namespace std;
// Funktioner
void student::setGender()
{
bool sex;
std::cout << "Specify sex of student; 1 (girl) or 0 (boy): ";
std::cin >> sex;
gender=(sex=0?0:1);
}
void student::giveGrade()
{
std::cout << "Specify student grade: (1-5) ";
std::cin >> grade;
}
float student::getGrade()//{return grade;}
{
return grade;
}
bool student::getGender()//{return gender;}
{
return gender;
}
calc.h
Code:
#ifndef CALC_H
#define CALC_H
#include"student.h"
#define students 20
class klass : public student
{
public:
klass();
~klass();
float AvGradeGirls();//{return AvGradeG;} medelbetyg för tjejer
float averagegrade();//{return totGrade;} medelbetyg
float AvGradeBoys();//{return AvGradeB;} medelbetyg för killar
//void addstudent(); //This function was never defined
int numBo();//{return numB;} Antal B
int numGi();//{return numG;} Antal G
int totalStudents(){return numG+numB;} // Totala antalet studneter
void collect();
void calcaverage();
private:
student stud[students];
int Ggrade;
int Bgrade; // Tjejsor och killsars sammanlagda betyg (ej medelvärde)
int numG;
int numB;
double AvGradeB; // Gossars betyg
double AvGradeG; // Flickors betyg
double totGrade; // Totala betyget
};
#endif // CALC_H
calc.cpp
Code:
#include "calc.h"
#include "student.h"
using namespace std;
klass::klass() : numG(0), numB(0), AvGradeG(0), AvGradeB(0), totGrade(0)
{
}
klass::~klass()
{
}
void klass::collect()
{
for(int i=(numG+numB);i>0;i--)
{
if(getGender()) // om getGender() är sann = tösabete...
{
Ggrade=Ggrade+getGrade();
numG++;
}
else // ...annars en hane
{
Bgrade=Bgrade+getGrade();
numB++;
}
}
}
void klass::calcaverage()
{
if(numG>0) // Inte dela med noll
AvGradeG=Ggrade/numG;
if(numB>0) // inte dela med noll
AvGradeB=Bgrade/numB;
if((numB+numG)>0) // inte dela med noll
totGrade=(Bgrade+Ggrade)/(numB+numG);
}
float klass::AvGradeGirls()//{return AvGradeG;}// medelbetyg för tjejer
{
return AvGradeG;
}
float klass::averagegrade()//{return totGrade;} // medelbetyg
{
return totGrade;
}
float klass::AvGradeBoys()//{return AvGradeB;} // medelbetyg för killar
{
return AvGradeB;
}
int klass::numBo()//{return numB;} Antal B
{
return numB;
}
int klass::numGi()//{return numG;} Antal G
{
return numG;
}
main.cpp
Code:
#include <iostream>
#include "calc.h"
#include "student.h"
using std::cin;
using std::cout;
using std::endl;
bool menu();
int main(int argc, char *argv[])
{
int SEL;
klass klass1; // Initiera ett objekt, "Klass", av klassen Klass
cout << "Menu selection:\n1.Add student data\n2.Randomize student data\n3.Exit" << endl;
cin >> SEL;
switch(SEL)
{
case 1: //klass1.addstudent(); //ERROR HERE
break;
case 2:
break;
case 3:
return 0;
default: cout << "ERROR" << endl;
}
klass1.collect();
klass1.calcaverage();
cout << "de " << klass1.numBo() << " killarnas medel \x84r " << klass1.AvGradeBoys() << "\n\n";
cout << "de " << klass1.numGi() << " tjejernas medel \x84r " << klass1.AvGradeGirls() << "\n\n";
cout << "de " << (klass1.numGi()+klass1.numBo()) << " studenternas medel \x84r " << klass1.averagegrade() << endl;
cin.ignore(255,'\n');
cin.get();
return 0;
}
--------------------Configuration: main - Win32 Debug--------------------
Compiling...
calc.cpp
student.cpp
main.cpp
Linking...
main.exe - 0 error(s), 0 warning(s)