Help with including

I have a problem, i need to connect three files, made the whole code, but now have to separate it to 3 files. intmain.cpp,intfunc.cpp and intclass.h, its pretty much how it sounds ,but i always get an error, It says redefinition of class Student, my head is killimg from this, its probably simple but i just cant do it

#include <iostream>
#include <string>
using namespace std;
// Klasa student
class Student{
   protected:
       string ime,prezime;
       int broj_ocjena,broj_indeksa;
       double srednja_ocjena;
   public:
       Student(string ime,string prezime,int broj_indeksa):
       ime(ime),prezime(prezime),broj_indeksa(broj_indeksa),srednja_ocjena(0),
       broj_ocjena(0) {}
   void UpisiOcjenu(int ocjena);
   virtual void IspisiPodatke();
   int Index(){return broj_indeksa; }
};
void Student::UpisiOcjenu(int ocjena){
    if (ocjena<1||ocjena>5) cout<< "Krivi unos ocjene."<<endl;
    else
        if (srednja_ocjena==0) srednja_ocjena=ocjena;
        else srednja_ocjena=((srednja_ocjena*broj_ocjena)+ocjena)/(broj_ocjena+1);
        broj_ocjena++;
}
void Student::IspisiPodatke(){
    cout<<"Student "<<ime<<" "<<prezime<<" sa brojem indeksa "<<broj_indeksa<<
    " ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_Prvi_Stupanj
class Student_Prvi_Stupanj:
public Student{
   public:
      Student_Prvi_Stupanj(string ime,string prezime,int broj_indeksa):
      Student(ime,prezime,broj_indeksa){}
   virtual void IspisiPodatke();
};
void Student_Prvi_Stupanj::IspisiPodatke(){
    cout<<"Student prvog stupnja "<<ime<<" "<<prezime<<" sa brojem indeksa "
    <<broj_indeksa<<" ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_Drugi_Stupanj
class Student_Drugi_Stupanj:
public Student{
   public:
      Student_Drugi_Stupanj(string ime,string prezime,int broj_indeksa):
      Student(ime,prezime,broj_indeksa) {}
   virtual void IspisiPodatke();
};
void Student_Drugi_Stupanj::IspisiPodatke(){
   cout<<"Student drugog stupnja"<<ime<<" "<<prezime<<" sa brojem indeksa "
   <<broj_indeksa<<" ima prosjek "<<srednja_ocjena<<"."<<endl;
}
// Klasa Student_specijalist
class Student_specijalist:
public Student{int godina_diplomiranja;
public:
    Student_specijalist(string ime,string prezime,int broj_indeksa,
    int godina_diplomiranja):Student(ime,prezime,broj_indeksa),
    godina_diplomiranja(godina_diplomiranja) {}
    virtual void IspisiPodatke();
};
void Student_specijalist::IspisiPodatke(){
    cout<<"Student specijalistickog studija "<<ime<<" "<<prezime<<" sa brojem indeksa "
    <<broj_indeksa<<", diplomirao godine "<<godina_diplomiranja<<", ima prosjek "
    <<srednja_ocjena<<"."<<endl;
}
class StudentskaSluzba{
   int broj_studenata;
   const int MaxBrStudenata;
   Student **studenti;
  public:
   explicit StudentskaSluzba(int Max):
   broj_studenata(0), MaxBrStudenata(Max),studenti(new Student*[Max]) { }
  ~StudentskaSluzba() {
   for(int i=0;i<broj_studenata;i++)
   delete studenti[i];delete[] studenti;}
  void UpisiStudenta(int br_indexa,char *Ime,char *Prezime,int a);
  void UpisiOcjenu(int index,int ocjena);
  void IspisiSpisak();
};
void StudentskaSluzba::UpisiStudenta(int br_indexa, char *Ime, char *Prezime,int a){
    if (MaxBrStudenata==broj_studenata) cout<< "Ne moze se vise unijeti novih studenata."<<endl;
    Student *St;
    if (a==1) St=new Student_Prvi_Stupanj(Ime,Prezime,br_indexa);
    else if (a==2) St = new Student_Drugi_Stupanj(Ime, Prezime, br_indexa);
    else St = new Student_specijalist(Ime,Prezime,br_indexa,a);
    studenti[broj_studenata]=St;
    broj_studenata++;
}
void StudentskaSluzba::UpisiOcjenu(int index,int ocjena){
    int pom;
    bool istina(true);
    for (int i=0;i<broj_studenata;i++)
    if(index==studenti[i]->Index()) { istina=false; pom=i; }
    if (istina==false) studenti[pom]->UpisiOcjenu(ocjena);
    else cout<< "Student ne postoji."<<endl;
}
void StudentskaSluzba::IspisiSpisak(){
   if (broj_studenata==0) cout<< "Nema unesenih studenata."<<endl;
   for (int i=0;i<broj_studenata;i++) studenti[i]->IspisiPodatke();
}
// Glavni program
int main(){
StudentskaSluzba tvz(15);
tvz.UpisiStudenta(1,"Ivo","Ivic",1);
tvz.UpisiStudenta(2,"Meho","Mehic",1998);
tvz.UpisiStudenta(3,"Vaso","Vasic",2);
tvz.UpisiStudenta(4,"Ibro","Ibric",1);
tvz.UpisiStudenta(5,"Marko","Markovic",2001);
tvz.UpisiOcjenu(1,3);
tvz.UpisiOcjenu(1,4);
tvz.UpisiOcjenu(1,3);
tvz.UpisiOcjenu(3,2);
tvz.UpisiOcjenu(5,4);
tvz.IspisiSpisak();
getchar();
return 0;
}
Last edited on
in every file use assert header and define some variable, and check for its definition. this way any header file included multiple times actually gets included once. here is an example.
1
2
3
4
5
# include <cassert>
#ifndef INCLUDED
#define INCLUDED
//rest of code in the header file.
#endif 

now even if you include the header file multiple times, your code is included only once and no redefinition error occurs because once the file is included the MACRO INCLUDED gets defined and ifndef condition says false after that so your code is included once. for more details look at http://www.cplusplus.com/doc/tutorial/preprocessor/.
Topic archived. No new replies allowed.