Заголовок реплики QtRemoteObjects, автоматически сгенерированный, жалуется на неопределенную vtable - PullRequest
0 голосов
/ 18 января 2019

Начал использовать QtRO и сгенерированные файлы по своей сути жалуются на vtable:

#ifndef REP_REMOTEEXAMPLE_H
#define REP_REMOTEEXAMPLE_H

// This is an autogenerated file.
// Do not edit this file, any changes made will be lost the next time it is generated.

#include <QtCore/qobject.h>
#include <QtCore/qdatastream.h>
#include <QtCore/qvariant.h>
#include <QtCore/qmetatype.h>

#include <QtRemoteObjects/qremoteobjectnode.h>
#include <QtRemoteObjects/qremoteobjectpendingcall.h>
#include <QtRemoteObjects/qremoteobjectreplica.h>


class remoteExampleReplica : public QRemoteObjectReplica
{
    Q_OBJECT
    Q_CLASSINFO(QCLASSINFO_REMOTEOBJECT_TYPE, "remoteExample")
    Q_CLASSINFO(QCLASSINFO_REMOTEOBJECT_SIGNATURE, "5e40a606abdd95f709878d419edaa735fce25d0d")

public:
    remoteExampleReplica() : QRemoteObjectReplica() { initialize(); }
    static void registerMetatypes()
    {
        static bool initialized = false;
        if (initialized)
            return;
        initialized = true;
    }

private:
    remoteExampleReplica(QRemoteObjectNode *node, const QString &name = QString())
        : QRemoteObjectReplica(ConstructWithNode)
    {
        initializeNode(node, name);
    }

    void initialize() override
    {
        remoteExampleReplica::registerMetatypes();
        QVariantList properties;
        properties.reserve(0);
        setProperties(properties);
    }

public:
    virtual ~remoteExampleReplica() {}


Q_SIGNALS:
    void Close(QString a);
    void Open(QString b);

public Q_SLOTS:
    void onClosed()
    {
        static int __repc_index = remoteExampleReplica::staticMetaObject.indexOfSlot("onClosed()");
        QVariantList __repc_args;
        send(QMetaObject::InvokeMetaMethod, __repc_index, __repc_args);
    }
    void onOpened()
    {
        static int __repc_index = remoteExampleReplica::staticMetaObject.indexOfSlot("onOpened()");
        QVariantList __repc_args;
        send(QMetaObject::InvokeMetaMethod, __repc_index, __repc_args);
    }

private:
    friend class QT_PREPEND_NAMESPACE(QRemoteObjectNode);
};

#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0))
#endif


QT_BEGIN_NAMESPACE
QT_END_NAMESPACE


#endif // REP_REMOTEEXAMPLE_H

Проблема указывает на частный конструктор. Я включил в свой код только заголовок реплики, не используя удаленный объект в качестве тестового прогона. Я много читал о vtables, как они работают, и когда компоновщик жалуется на vtable, но в этом случае, с приватным конструктором, я не уверен, в чем проблема.
Мне не хватает реализации удаленного объекта? Разве я не генерировал файлы правильно?

.rep:

class remoteExample
{
  SIGNAL(Close(QString a));
  SIGNAL(Open(QString b));
  SLOT(onClosed());
  SLOT(onOpened());
};
...