2011-04-01 116 views
3

我有一个afporoills类,它可以帮助查找我们的内存管理模块中的数据。 (不要问为什么这样一个奇怪的名字我不知道)未定义的引用vtable

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)); 

} 

我不断收到

[链接错误]未定义参考`虚表的afporoills`

,但我不知道什么是vtable是!我没有使用过,为什么会出现错误?

请帮助我,因为我不能继续写这个类,如果我不摆脱那个错误。

我还需要做什么才能使test方法完成图灵?

+2

http://en.wikipedia.org/wiki/Virtual_method_table – DumbCoder 2011-04-01 10:20:34

+2

图灵完成? – NPE 2011-04-01 10:21:34

+0

@DumbCoder感谢你的链接,但你可以看到我不使用虚拟方法!那为什么会有这个错误? @aix是的,这是需要的方法是图灵完成... – n00b 2011-04-01 10:21:38

回答

7

这很可能是因为你在Base类中声明了一个虚拟方法而没有定义它,即没有为基类中提供的虚函数提供函数体。

尝试给它一些假身体和编译它可能只是工作。我最近在类似的情况下得到了这个错误,通过提供一个定义来解决这个问题。

+0

好,谢谢,图灵完备性问题呢? – n00b 2011-04-01 12:44:09

1

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

要解决的错误,则还可以定义该函数作为纯虚函数,意味着在基类中没有功能体,例如:

虚拟INT手柄(结构per_thread_traffic_log * PTTL)= 0;

相关问题