📜  未定义对 vtable qt 的引用 (1)

📅  最后修改于: 2023-12-03 15:10:39.134000             🧑  作者: Mango

未定义对 vtable qt 的引用

在 Qt 中,当出现 "未定义对 vtable qt 的引用" 错误时,通常指的是该类缺少了虚函数的实现。

原因

一般情况下,当一个类中声明了虚函数时,编译器会自动生成该类的虚函数表(vtable),并在实现中使用该表。如果类的某个函数未被正确地实现,或者在该类的头文件中没有声明虚函数,则会导致 vtable 无法生成,从而出现未定义对 vtable qt 的引用错误。

解决方案
  1. 确保每个声明了虚函数的类都有正确的实现。
  2. 确认头文件中已正确声明所有虚函数。
  3. 检查类的继承关系,确保父类的虚函数都被正确实现或声明。

若以上方案均未解决问题,可以尝试清除编译缓存或重新生成 Qt 项目,并重新编译。

示例代码片段
class MyClass {
public:
    virtual void myFunc() = 0;
};

class MyImplClass : public MyClass {
public:
    virtual void myFunc() {
        // 实现代码
    }
};

// 在没有正确实现 MyClass::myFunc() 时,以下代码会触发未定义对 vtable qt 的引用错误
MyClass* obj = new MyImplClass;
obj->myFunc();