这个问题与之前提出的问题类似,但我在 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/