未定义的引用vtable

时间:2011-04-01 10:15:45

标签: c++ vtable

我有一个类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方法图灵完成?

2 个答案:

答案 0 :(得分:11)

您可能会遇到此错误,因为您在Base类中声明了一个虚方法并且没有定义它,即没有基类中提供的虚函数的函数体。

尝试给它一些假身体并编译它可能只是工作。我最近在一个类似的场景中得到了这个错误,通过提供定义得到修复。

答案 1 :(得分:2)

错误表明您没有定义基类的虚函数,编译器无法在基类的虚方法表中找到此函数。 每个派生类的对象都将具有此Virtual方法表,该表包含派生类中定义的方法的地址。

要解决您的错误,您还可以将此函数定义为PURE虚函数,表示基类中没有函数体,例如:

  

virtual int handle(struct per_thread_traffic_log * pttl)= 0;