Qt creator Неопределенная ссылка на "class :: function" в linux - PullRequest
0 голосов
/ 07 ноября 2018

Этот вопрос похож на тот, который задавался ранее, но у меня проблема с распознаванием Qt моего класса и функций, несмотря на то, что они определены. Я делаю это в Linux, где версия Qt только 5,5, а версия для Windows на 5.11. При запуске той же программы в Windows я не получаю ошибок.

Я получаю "неопределенную ссылку на QCanBus::instance()" ошибки

Это происходит для каждой QCanBus функции. В моем фрагменте кода от connectdialogue.cpp показано только первое вхождение, которое можно найти во второй и последней строке кода и выдает ошибки:

"неопределенная ссылка на QCanBus::instance()"

"неопределенная ссылка на QCanBus::plugins()"

Эти ошибки выдаются несмотря на то, что они определены в заголовочном файле qcanbus.h.

Я попытался добавить строки static QCanBus *instance() или, альтернативно, QCanBus *instance() под строками #include в моем connectdialogue.cpp, но затем мне выдается предупреждение: «QCanBus::instance() определено, но не используется», когда оно явно используется во второй-последней строке фрагмента рекомендуемого кода.

Как мне исправить эти ошибки?

connectdialogue.cpp

 #include "connectdialog.h"
 #include "ui_connectdialog.h"

 #include "qcanbus.h"

ConnectDialog::ConnectDialog(QWidget *parent) :
     QDialog(parent),
     m_ui(new Ui::ConnectDialog)
{
m_ui->setupUi(this);

m_ui->errorFilterEdit->setValidator(new QIntValidator(0, 0x1FFFFFFFU, this));

m_ui->loopbackBox->addItem(tr("unspecified"), QVariant());
m_ui->loopbackBox->addItem(tr("false"), QVariant(false));
m_ui->loopbackBox->addItem(tr("true"), QVariant(true));

m_ui->receiveOwnBox->addItem(tr("unspecified"), QVariant());
m_ui->receiveOwnBox->addItem(tr("false"), QVariant(false));
m_ui->receiveOwnBox->addItem(tr("true"), QVariant(true));

m_ui->canFdBox->addItem(tr("false"), QVariant(false));
m_ui->canFdBox->addItem(tr("true"), QVariant(true));

m_ui->dataBitrateBox->setFlexibleDateRateEnabled(true);

connect(m_ui->okButton, &QPushButton::clicked, this, &ConnectDialog::ok);
connect(m_ui->cancelButton, &QPushButton::clicked, this, &ConnectDialog::cancel);
connect(m_ui->useConfigurationBox, &QCheckBox::clicked,
        m_ui->configurationBox, &QGroupBox::setEnabled);
connect(m_ui->backendListBox, &QComboBox::currentTextChanged,
        this, &ConnectDialog::backendChanged);
connect(m_ui->interfaceListBox, &QComboBox::currentTextChanged,
        this, &ConnectDialog::interfaceChanged);
m_ui->rawFilterEdit->hide();
m_ui->rawFilterLabel->hide();

m_ui->backendListBox->addItems(QCanBus::instance()->plugins());

updateSettings();
 }

qcanbus.h

#ifndef QCANBUS_H
#define QCANBUS_H

#include <QtCore/qobject.h>
#include "qserialbusglobal.h"
#include "qcanbusdevice.h"
#include "qcanbusdeviceinfo.h"

QT_BEGIN_NAMESPACE

class Q_SERIALBUS_EXPORT QCanBus : public QObject
{
    Q_OBJECT

public:
    static QCanBus *instance();
    QStringList plugins() const;

    QList<QCanBusDeviceInfo> availableDevices(const QString &plugin, QString *errorMessage = nullptr) const;

    QCanBusDevice *createDevice(const QString &plugin,
                                const QString &interfaceName,
                                QString *errorMessage = nullptr) const;

private:
    QCanBus(QObject *parent = nullptr);

    Q_DISABLE_COPY(QCanBus)
};

QT_END_NAMESPACE

#endif // QSERIALBUS_H

1 Ответ

0 голосов
/ 25 января 2019

QCanBus отсутствовал QCanBus.cpp и не был объявлен.

...