c++ - Qt 创建者在 linux 中对 "class::function"的 undefined reference

标签 c++ linux qt class can-bus

这个问题与之前提出的问题类似,但我在 Qt 识别我的类和函数时遇到了问题,尽管它们已经被定义了。我在 Linux 中执行此操作,其中 Qt 版本仅为 5.5,而 Windows 版本为 5.11。在 Windows 中运行相同的程序时,我没有收到任何错误。

我收到“ undefined reference QCanBus::instance()”错误

每个 QCanBus 函数都会发生这种情况。在我的 connectdialogue.cpp 代码片段中,只有第一个出现的地方被选中,并且可以在倒数第二个代码行中找到并给出错误:

“对 QCanBus::instance() 的 undefined reference

“对 QCanBus::plugins() 的 undefined reference

尽管在 qcanbus.h 头文件中定义了这些错误,但还是会出现这些错误。

我尝试在 connectdialogue.cpp 中的 #include 行下添加 static QCanBus *instance() 行或 QCanBus *instance() 行,但随后出现警告: 当在特色代码片段的倒数第二行中明确使用时,“QCanBus::instance() 已定义,但未使用”。

如何修复这些错误?

连接对话.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

最佳答案

QCanBus 缺少 QCanBus.cpp 并且未声明。

关于c++ - Qt 创建者在 linux 中对 "class::function"的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53195603/

相关文章:

php - 从 php 执行 linux 程序

linux - Linux上的OpenGL

qt - 我可以使用简单的 html 获得单行大小的 QTextEdit 吗?

c++ - 继承 std::istream 或等价物

c++ - C++ 初学者。获取代码中的错误

c++ - DLL注册返回码0x80029c4a

c - 查找可用堆空间背后的逻辑

c++ - 将非静态成员函数作为函数的参数传递

c++ - 对于 C++ 中的单个静态变量,是否有比类更好的选择?

c - 从 QT 运行 C 程序