Автор: Raimir
Дата сообщения: 30.05.2009 14:08
Товарищи прграммеры помогите новенькому ПЛИЗ!!!!Лето...зачеты...
Итак проблема в том что я не могу эту прогу раскидать по файлам..то есть именно функцию GetEXAM(TObject *p,int exm).count как видите я объявил глобально шоб и для main было видно но когда отделяю функцию в Function.h то одни траблы..где я только не пробовал этот count ставить - ниче. extern и volatile тоже не помогают..объясните пожалуйста чайнику че тут не так то есть куда и с чем присунуть этот count???
[more]
вот исходник:
#include <iostream.h>
#include <string.h>
#include <typeinfo>
int count = 0;
int c=0;
class TObject {
public: virtual void Show() = 0;
};
struct Titem {
TObject *Item;
Titem *next;
};
class TGroup : public TObject
{
protected : Titem *tp;
char *sname;
public:
TGroup (char *snm);
TGroup (TGroup&);
virtual ~TGroup();
virtual void Show () = 0;
char* GetName();
void SetName(char *snm);
void Insert (TObject* obj);
};
TGroup :: TGroup (char *snm){ tp =0;
sname = new (char[30]);
strcpy (sname,snm);
}
TGroup :: ~TGroup () {free(tp);}
char* TGroup :: GetName () {cout<<sname<<endl;}
void TGroup :: SetName (char* snm) {strcpy (sname,snm);}
void TGroup :: Insert (TObject* obj)
{
Titem *p;
if (tp == 0)
{
tp = new(Titem);
tp->next=0;
tp->Item = obj;
}
else
{
p = new(Titem);
p = tp;
while (p->next!=0) p=p->next;
p->next=new(Titem);
p=p->next;
p->Item=obj;
p->next=0;
}
}
typedef void (*PF)(TObject* ,int);
class Student : public TGroup{
protected : int exam;
public:
Student(char* snm,int exam);
Student(Student &ST);
virtual ~Student();
void Show();
int GetExam();
void SetExam(int ex);
void ITERAT (PF action,int ex);
};
Student :: Student (char* snm,int ex) : TGroup(snm) { exam = ex;}
Student :: ~Student () {}
void Student :: Show(){ cout<<"Студент : "<<sname<<"\nЭкзаменов сдал: "<<exam<<endl;}
int Student :: GetExam() {return exam;}
void Student :: SetExam(int ex) {exam = ex;}
void Student :: ITERAT (PF operation,int ex)
{
Titem* p;
p = new (Titem);
p = tp;
while (p!= NULL)
{
operation(p->Item,ex);
p = p->next;
}
}
class Expirience: public TObject {
protected :
char *name;
int quiz,time;
Expirience *next;
static Expirience *begin;
public:
Expirience ();
Expirience (char* e, int qu,int t);
~Expirience ();
void Insert();
static void Print();
virtual void Show() = 0;
};
Expirience* Expirience :: begin = 0;
Expirience :: Expirience ()
{
name = new (char [30]);
quiz = 0;
time = 0;
};
Expirience :: Expirience (char* e,int qu,int t)
{
name = new (char[30]);
strcpy(name,e);
quiz = qu;
time = t;
}
Expirience :: ~Expirience ()
{
free(name);
}
void Expirience :: Insert()
{
bool flag;
Expirience *p;
flag = false;
if (begin == 0)
{
begin = this;
next = 0;
}
else
{
p = begin;
while (p->next!=0)
{
if(p==this)
{
flag = true;
break;
}
p = p->next;
}
if (flag==false)
{
next = 0;
p->next = this;
}
}
}
void Expirience :: Print ()
{
Expirience *p;
if(begin!=0)
{
p=begin;
cout <<"-----------------Список предметов----------------\n";
while(p!=0)
{
cout<<p->name<<endl;
p = p->next;
}
cout <<"-------------------------------------------------\n";
}
}
class Examine : public Expirience {
protected: char* stud;
int tick;
public : Examine();
Examine(char* e,int qu,int t,int ti,char* s);
~Examine();
void Show();
void Get();
};
Examine :: Examine () {stud = new(char[30]);}
Examine :: Examine (char* e,int qu,int t,int ti,char* s) : Expirience (e,qu,t) {stud = new(char[30]);
strcpy(stud,s);
tick = ti;
}
Examine :: ~Examine () {free(stud);}
void Examine :: Show() {cout<<name<<endl;}
void GetEXAM (TObject *p,int exm)
{
if (typeid(*p)==typeid(Examine)){
((Examine*)p)->Show();
c++;
if (c==3){
c=0;
count++;
}
}
if (typeid(*p)==typeid(Student))
{
cout<<"\n----------------Студент------------------\n";
((Student*)p)->Show();
cout<<"Экзаменов не сдано : "<<exm-(((Student*)p)->GetExam())<<"\n";
cout<<"Сдавшие экзамены : \n";
((Student*)p)->ITERAT(GetEXAM,3);
cout<<"-----------------------------------------\n\n";
}
};
int main()
{
PF fp = GetEXAM;
Examine inf("ИНФОРМАТИКА",5,120,30,"Все"), mat ("МАТЕМАТИКА",6,45,60,"10"), fhys("ФИЗИКА",3,45,100,"5");
Student Gr("Группа 37A",4),st1("Иванов В.С.",3), st2("Петров А.А.",2), st3("Андреев С.Н.",2), st4("Сидоров С.М.",1), st5("Козырев Н.П.",3),st6("Корнев Ж.Н.",1);
st1.Insert(&inf);
st1.Insert(&mat);
st1.Insert(&fhys);
st2.Insert(&mat);
st2.Insert(&fhys);
st3.Insert(&mat);
st3.Insert(&inf);
st4.Insert(&inf);
st5.Insert(&mat);
st5.Insert(&fhys);
st5.Insert(&inf);
Gr.Insert(&st1);
Gr.Insert(&st2);
Gr.Insert(&st3);
Gr.Insert(&st4);
Gr.Insert(&st5);
Gr.ITERAT(fp,3);
cout<<"\n"<<count<<" студента не сдали свои экзамены до конца!!!\n";
return 0;
};
вот мейкфайл
#makefile
make: main.cpp Expirience.o Examine.o TGroup.o Student.o
g++ Expirience.o Examine.o TGroup.o Student.o main.cpp -o EXE
expirience: Expirience.h Expirience.cpp
g++ Expirience.cpp -c
examine: Examine.h Examine.cpp
g++ Examine.cpp -c
tgroup: TGroup.h TGroup.cpp
g++ TGroup.cpp -c
student: Student.h Student.cpp
g++ Student.cpp -c
clr: *.o
rm *.o
[/more]