我有一个类afporoills
,可以帮助我们在内存管理模块中查找数据。 (不要问为什么这么奇怪的名字我不知道)
class afporoills{
void** test(int pos);
};
void** afporoills::test(int pos){
int x=(pos<<3)|1023*x;
void** ret=(void**)x;
if((int)ret%16) return this.test(pos+1);
void* (*fp)(float, uint16__t)=x;
ret=ret+(*fp)(1.0f, (uint16__t)pos);
return ret;
}
int test(){
afporoills afporoills14;
return ((char*) (uint32_t) ((uint32_t) (void*) afporoills14.test(((((uint32_t)))((char*) (void*))1));
}
我一直在
[链接器错误]未定义引用`vtable for afporoills`
但我不知道vtable是什么!我还没用过,为什么会有错误?
请帮助我,因为如果我没有摆脱那个错误,我就不能继续写那个课。
我还需要做些什么来使test
方法图灵完成?
答案 0 :(得分:11)
您可能会遇到此错误,因为您在Base类中声明了一个虚方法并且没有定义它,即没有基类中提供的虚函数的函数体。
尝试给它一些假身体并编译它可能只是工作。我最近在一个类似的场景中得到了这个错误,通过提供定义得到修复。
答案 1 :(得分:2)
错误表明您没有定义基类的虚函数,编译器无法在基类的虚方法表中找到此函数。 每个派生类的对象都将具有此Virtual方法表,该表包含派生类中定义的方法的地址。
要解决您的错误,您还可以将此函数定义为PURE虚函数,表示基类中没有函数体,例如:
virtual int handle(struct per_thread_traffic_log * pttl)= 0;