对 'vtable for' 的未定义引用

undefined reference to 'vtable for'

所以这是一个更大项目的一部分。我有 3 个不同的文件。第一个是以前项目中的 class,它只是用作类型 (visitor.h),所以我不会包括它,因为我知道它有效。然后我写了一个摘要 class 和另一个摘要 class 继承自 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.h 中有几个 classes 和错误:

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";
 }

第二个错误出现在 class floor 的函数中,但我希望如果我找出办公室错误,我也能找出 floor 的函数。

如果需要更多代码,请发表评论,我会进行编辑。

P.S。请忽略我可能留下的一些如果。代码最初是处理指针数组,现在我试图让它处理指针向量,所以可能会有一些剩余检查

您缺少在 office 中声明的某些虚拟方法的定义,即 searchget_capacity

因此,编译器无法为 office class 生成虚函数 table,因为它没有放置这些虚函数的地址。因此出现 "very useful" 错误消息,因为从编译器的角度来看,问题是虚拟 table 丢失了,而不是 为什么 丢失了。