4

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

4

2 回答 2

15

很可能你得到了这个错误,因为你在基类中声明了一个虚方法但没有定义它,即基类中提供的虚函数没有函数体。

尝试给它一些虚拟体并编译它可能会起作用。我最近在一个类似的场景中遇到了这个错误,通过提供一个定义得到了修复。

于 2011-04-01T11:07:09.353 回答
4

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

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

虚拟 int 句柄(struct per_thread_traffic_log * pttl)=0;

于 2013-04-23T10:18:12.437 回答