【问题标题】:QObject creates moc file, but still getting vtable errorsQObject 创建 moc 文件,但仍然出现 vtable 错误
【发布时间】:2011-08-06 02:10:21
【问题描述】:

在将 PrimitivePartsWrapper 设为 QObject 的子类(包括 Q_OBJECT 宏)后,我似乎无法摆脱这个错误。

undefined reference to `vtable for PrimitivePartsWrapper` (in register.o)

我已经运行了 qmake,并且 moc_primitive.cpp 包含在 makefile 中。它似乎只发生在 Qt 创建者中。如果我在命令行上运行 make,程序会编译,但我的嵌入式 python 中出现错误,无法找到 PrimitiveParts 类,这可能是不相关的。 QtCreator中的错误是否与register.o而不是primitive.o有关?还是 moc_primitive.o?

原始.h:

#ifndef PRIMITIVE_H
#define PRIMITIVE_H

#include "util.h"

class PrimitiveParts {
public:
    QVector<Point3> points;
    QVector<QList<int> > faces;
};

class PrimitivePartsWrapper : public QObject
{
    Q_OBJECT
public slots:
    PrimitiveParts* new_PrimitiveParts();
};

namespace primitive {
    PrimitiveParts cubePrimitive(float width, float height, float depth);
};


#endif // PRIMITIVE_H

primitive.cpp:

#include "primitive.h"

PrimitiveParts* PrimitivePartsWrapper::new_PrimitiveParts()
{
    return new PrimitiveParts();
}

namespace primitive {
    PrimitiveParts cubePrimitive(float width, float height, float depth)
    {
        float hx = width / 2;
        float hy = height / 2;
        float hz = depth / 2;

        // create the vertices
        Point3 p0(hx,hy,hz);
        Point3 p1(hx,hy,-hz);
        Point3 p2(-hx,hy,-hz);
        Point3 p3(-hx,hy,hz);
        Point3 p4(hx,-hy,hz);
        Point3 p5(hx,-hy,-hz);
        Point3 p6(-hx,-hy,-hz);
        Point3 p7(-hx,-hy,hz);

        QList<int> f0 = QList<int>() << 0 << 1 << 2 << 3;
        QList<int> f1 = QList<int>() << 4 << 5 << 1 << 0;
        QList<int> f2 = QList<int>() << 6 << 2 << 1 << 5;
        QList<int> f3 = QList<int>() << 7 << 3 << 2 << 6;
        QList<int> f4 = QList<int>() << 7 << 4 << 0 << 3;
        QList<int> f5 = QList<int>() << 4 << 7 << 6 << 5;

        struct PrimitiveParts parts;
        parts.points = QVector<Point3>() << p0 << p1 << p2 << p3 << p4 << p5 << p6 << p7;
        parts.faces = QVector<QList<int> >() << f0 << f1 << f2 << f3 << f4 << f5;
        return parts;
    }
};

【问题讨论】:

    标签: c++ qt vtable moc


    【解决方案1】:

    您没有提供所有代码,但无论如何尝试清理您的项目,重新运行 qmake 并全部重建。

    【讨论】:

    • 我无法提供所有代码,因为它有数千行。我已经尝试清理所有内容,运行 qmake 并重新构建所有内容。
    • 我试图以某种方式编译你的代码,看起来还可以。该错误通常意味着有一个未实现的虚拟功能。你是否已经尝试过实现构造函数和析构函数?
    猜你喜欢
    • 2013-06-30
    • 2020-01-01
    • 2021-06-15
    • 1970-01-01
    • 2019-07-09
    • 2019-06-01
    • 2020-05-28
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多