因此,这是一个更大的项目的一部分。我有3个不同的文件。第一个是上一个项目中的类,该类仅用作类型(visitor.h),所以我不会包含它,因为我知道它可以工作。然后,我写了一个抽象类和另一个从space.h中第一个继承的抽象类,如下所示:
function myFunc(id) {
print("myFunc: got " + id);
return db.foo.findOne({_id: id});
}
db.foo.aggregate([
{$match: { _id: ObjectId(s_oid1) }}
,{$addFields: {qq: myFunc("$_id")}}
]);
现在在我的班上。我有几个班和错误:
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.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.cpp:
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();
};
第二个错误出现在教室地板的功能中,但我希望如果我发现办公室错误,我也将找出地板的错误。
如果需要更多代码,请发表评论,我会进行编辑。
P.S。如果我可能落伍了,请忽略。该代码本来是处理指针数组的,但现在我试图使其处理指针向量,以便可能会有一些剩余的检查
答案 0 :(得分:0)
您缺少在office
中声明的某些虚拟方法的定义,即search
和get_capacity
。
结果是,编译器无法为office
类生成虚拟函数表,因为它没有将这些虚拟函数放在其中的地址。因此出现“非常有用”的错误消息,因为从编译器的角度来看,问题在于虚拟表丢失了,而不是为什么丢失了。