Так что это часть большого проекта.У меня есть 3 разных файла.Первый - это класс из предыдущего проекта, который просто используется как тип (visitor.h), поэтому я не буду его включать, поскольку знаю, что он работает.Затем я написал абстрактный класс и другой абстрактный класс, который наследуется от первого в space.h, вот так:
class space{
public:
virtual int get_vis_count() const = 0;
virtual int __enter(Visitor *v) = 0;
virtual int search(Visitor *v) = 0;
virtual Visitor* __exit(int index) = 0;
virtual void print() const = 0;
virtual ~space() { };
};
class capped_space: public space{
public:
virtual int get_capacity() const = 0;
virtual int has_space() const = 0;
};
Теперь в моем classes.hi есть несколько классов и ошибка:
classes.o: In function `office::office(building*, int, int)':
classes.cpp:(.text+0x8fe): undefined reference to `vtable for office'
classes.o: In function `office::~office()':
classes.cpp:(.text+0xe1a): undefined reference to `vtable for office'
СОЗ.classes.h:
class office:public capped_space{
private:
int office_number, No;
int current_visitors;
int _f;
vector<Visitor*> visitors;
public:
office(building *b, int on, int m);
int get_capacity() const;
int has_space() const;
int get_vis_count() const;
int get_numb() const;
int __enter(Visitor * visitor);
int search(Visitor *v);
Visitor* __exit(int index);
Visitor* done();
void print() const;
~office();
};
classes.cpp:
office::office(building *b, int on, int m): office_number(on), current_visitors(0), _f(m){
No = b->get_space_size('o');
cout << "Office number: " << office_number << "\thas been created\n";
}
int office::get_vis_count() const{
return current_visitors;
}
int office::has_space() const{
return (current_visitors < No);
}
int office::get_numb() const{
return office_number;
}
int office::__enter(Visitor * visitor){
if(visitor == NULL) return -1;
if(has_space()){
if(!visitor->__done()){
if((visitor->get_office() == office_number)){
visitors.push_back(visitor);
cout << "Entering office " << _f << "-" << office_number << "\t: ";
visitors[current_visitors]->print_v();
current_visitors++;
return 1;
}else{
return 0;
}
}else{
return 1;
}
}else{
cout << "Please, wait outside for entrance in office number: " << office_number << endl;
return 0;
}
}
Visitor* office::__exit(int index){
if (visitors[index]->__done()){
Visitor *nav;
nav = visitors[index];
visitors.erase(visitors.begin() + index);
current_visitors--;
return nav;
}else{
return NULL;
}
}
Visitor* office::done(){
if(current_visitors){
int random;
random = rand() % current_visitors;
visitors[random]->__set_done();
cout << "Exiting office " << _f << "-" << office_number << "\t: ";
visitors[random]->print_v();
return __exit(random);
}else{
return NULL;
}
}
void office::print() const{
if(current_visitors != 0){
cout << "Floor: " << _f << endl;
cout << "Office: " << office_number << endl;
for (int i = 0; i < No; i++)
{
visitors[i]->print_v();
}
cout << endl;
}
}
office::~office(){
cout << "End of the work!\n";
}
Вторая ошибка появляется в функциях класса, но я надеюсь, что если я обнаружу офисную ошибку, я также выяснюfloor.
Если вам понадобится еще какой-нибудь код, пожалуйста, прокомментируйте, и я отредактирую.
PS, пожалуйста, не обращайте внимания на некоторые вопросы, которые я мог оставить позади.Изначально код обрабатывал массивы указателей, и теперь я пытаюсь заставить его обрабатывать векторы указателей, чтобы могли быть некоторые оставшиеся проверки