【问题标题】:undefined reference to vtable [duplicate]未定义对 vtable 的引用 [重复]
【发布时间】:2011-07-27 14:04:30
【问题描述】:

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

【问题讨论】:

  • @DumbCoder 谢谢你的链接,但你可以看到我不使用虚拟方法!那么为什么会出现这个错误呢? @aix 是的,需要该方法是图灵完备的...
  • 混淆竞赛的合适人选。太糟糕了,它不会编译:P
  • 这是一个错误吗? int x=(pos&lt;&lt;3)|1023*x;x 在此分配的右侧有什么值?
  • 一个足够愚蠢的愚人节与真实的东西没有区别。

标签: c++ vtable


【解决方案1】:

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

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

【讨论】:

  • 好的,谢谢,图灵完整性问题呢?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多